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]?

Reverse ListB, von dort [listA.insert (pos, x) für x in [listB]]
— John Mee


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] 

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]

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

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]

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[:])

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.