Wie lautet die Syntax zum Einfügen einer Liste in eine andere Liste in Python?

197

Gegeben zwei Listen:

x = [1,2,3]
y = [4,5,6]

Wie lautet die Syntax für:

  1. xIn ysolche einfügen , die yjetzt so aussehen [1, 2, 3, [4, 5, 6]]?
  2. Legen Sie alle Einzelteile der xin yso dass yjetzt aussieht [1, 2, 3, 4, 5, 6]?
Soumya
quelle
Reverse ListB, von dort [listA.insert (pos, x) für x in [listB]]
John Mee
siehe auch diesen Beitrag: stackoverflow.com/questions/5805892/…
Jos de Kloe
1
@ JohnMee Meinst du listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4

Antworten:

360

Meinst du append?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

Oder zusammenführen?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 
Paolo Bergantino
quelle
3
Ist das vorhanden oder ergibt sich eine neue Instanz?
Daniel Möller
7
x.extend(y)ist vorhanden, x+ygibt neue Liste zurück. Und x += y, was hier nicht erwähnt wurde, ähnelt dem Umfang.
wim
85

Die Frage macht nicht klar, was genau Sie erreichen wollen.

List hat die appendMethode, die ihr Argument an die Liste anfügt:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

Es gibt auch die extendMethode, mit der Elemente aus der Liste, die Sie übergeben, als Argument angehängt werden :

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

Und natürlich gibt es die insertMethode, die sich ähnlich verhält, appendaber die Angabe der Einfügemarke ermöglicht:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

Um eine Liste an einer bestimmten Einfügemarke zu erweitern, können Sie das Listen-Slicing verwenden (danke, @florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

Das Aufteilen von Listen ist sehr flexibel, da es ermöglicht, einen Bereich von Einträgen in einer Liste durch einen Bereich von Einträgen aus einer anderen Liste zu ersetzen:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Sergey
quelle
34
Wenn Sie auf eine bestimmte Einfügemarke 'erweitern' möchten, können Sie die List-Slicing-Syntax verwenden (siehe stackoverflow.com/a/7376026/1075152 )
florisla
5
@ florislas Kommentar sollte die akzeptierte Antwort sein. Dies ist die einzige Möglichkeit, eine Liste an einer beliebigen Stelle (nicht nur am Ende) in eine andere Liste einzufügen.
Weber
1
@weaver Während es die einzige Lösung zu tun , dass (erstrecken sich in einem bestimmten Index), die nicht die ursprüngliche Frage war.
Florida
@florisla Das ist Pedanterie.
Weber
3

Sie können auch einfach tun ...

x += y
user3707850
quelle
Dies sollte ein Kommentar zu der akzeptierten Antwort sein, da diese erwähnt x + yund x += ygenau dasselbe ist, aber vorhanden ist.
HTNW
Ich habe nicht den Ruf, das zu tun, aber wenn es jemand anderes kann!
user3707850
2

Wenn Sie die Elemente in einer Liste (Liste2) am Ende einer anderen Liste (Liste) hinzufügen möchten, können Sie die Methode zum Erweitern der Liste verwenden

list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

Oder wenn Sie zwei Listen verketten möchten, können Sie + sign verwenden

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]
squal
quelle
0

Wenn wir dies nur tun x.append(y), wird y in x referenziert, sodass sich alle an y vorgenommenen Änderungen auch auf das angehängte x auswirken. Wenn wir also nur Elemente einfügen müssen, sollten wir Folgendes tun:

x = [1,2,3] y = [4,5,6] x.append(y[:])

Raj Stha
quelle