HOWTO · Python
Wie man zwei oder mehrere Listen in Python verkettet
Dieses Tutorial zeigt, wie Sie zwei oder mehr Listen in Python verketten und je nach gewünschtem Ergebnis und Umgang mit den ursprünglichen Listen die passende Methode auswählen.
Auf dieser Seite
Verwenden Sie +, wenn Sie eine neue Liste erstellen möchten, und extend() oder +=, wenn Sie Elemente zu einer bestehenden Liste hinzufügen möchten. Für mehrere Listen ist das Entpacken von Iterables eine kompakte Möglichkeit; itertools.chain() eignet sich, wenn Sie die Werte als Iterator verarbeiten möchten. Die folgenden Beispiele verwenden dieselben Listen, damit Sie die jeweiligen Ergebnisse vergleichen können.
Python-Listen enthalten geordnete Elemente und lassen sich auf verschiedene Arten kombinieren. Wählen Sie die Methode danach aus, ob sich die ursprüngliche Liste ändern darf und ob der nächste Schritt eine Liste oder einen Iterator benötigt.
Listen mit dem +-Operator verketten
Der +-Operator erstellt eine neue Liste und lässt beide Eingabelisten unverändert. Er funktioniert mit zwei oder mehr Listen; jedes weitere + fügt eine zusätzliche Liste hinzu.
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = first + second + third
print(combined)
Wenn Sie beispielsweise first = first + second zuweisen, verweist first anschließend auf die neu erstellte kombinierte Liste. Das ursprüngliche Listenobjekt wird dabei nicht direkt verändert. Verwenden Sie +, wenn Sie die Quelllisten weiterhin benötigen.
Eine Liste mit extend() erweitern
extend() fügt jedes Element eines Iterables am Ende der Liste hinzu, für die die Methode aufgerufen wird. Dabei wird diese Liste verändert und None zurückgegeben. Speichern Sie daher die Zielliste in einer Variablen, statt das Ergebnis des Methodenaufrufs zuzuweisen.
first = [1, 2, 3]
second = [4, 5]
first.extend(second)
Das unterscheidet sich von first.append(second): append() fügt second als ein einzelnes verschachteltes Element hinzu, während extend() die Elemente einzeln ergänzt. Als Iterable eignen sich beispielsweise eine Liste, ein Tupel oder ein anderes Iterable.
Eine Liste mit += direkt erweitern
Bei einer Liste fügt += die Elemente des rechts stehenden Iterables der bestehenden Liste hinzu, ähnlich wie extend().
first = [1, 2, 3]
second = [4, 5]
first += second
Das ist eine kompakte Möglichkeit, die Liste auf der linken Seite zu aktualisieren. Im Gegensatz dazu erstellt first = first + second eine neue Liste und bindet den Namen first an diese Liste.
Listen durch Entpacken verketten
Beim Entpacken von Iterables werden die Elemente jeder Quellliste in ein neues Listenliteral übernommen. Die Syntax funktioniert mit zwei oder mehr Listen und lässt die Eingabelisten unverändert.
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = [*first, *second, *third]
* entpackt jedes Iterable innerhalb der Klammern und erzeugt so eine flache Liste. Diese Entpackungssyntax wurde mit Python 3.5 eingeführt (siehe PEP 448).
itertools.chain() verwenden
itertools.chain() liefert die Elemente seiner Eingabe-Iterables der Reihe nach. Das Ergebnis ist ein Iterator. Wenn Sie eine konkrete Liste benötigen, übergeben Sie ihn an list().
from itertools import chain
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = list(chain(first, second, third))
Wenn Sie den Iterator beibehalten, wird die kombinierte Liste nicht vorab erstellt. Das ist nützlich, wenn Sie die Werte lediglich durchlaufen möchten. Weitere Informationen finden Sie in der Python-Dokumentation zu itertools.chain().
Listen mit einer Schleife oder einem Listenverständnis verketten
Eine Schleife ist hilfreich, wenn jedes Element zusätzlich verarbeitet werden muss. append() fügt jeweils ein Element hinzu. Durchlaufen Sie daher jede Quellliste, um ein flaches Ergebnis zu erstellen.
lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = []
for current in lists:
for item in current:
combined.append(item)
Ein Listenverständnis drückt denselben Durchlauf kompakt aus:
lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = [item for current in lists for item in current]
Beide Ansätze erstellen eine neue Liste. Verwenden Sie die Schleife, wenn ihre Schritte erklärt werden müssen oder zusätzliche Logik enthalten; für eine direkte Abflachung eignet sich das Listenverständnis.
Methoden vergleichen und die passende auswählen
| Ansatz | Wird eine Eingabeliste verändert? | Ergebnis | Für mehrere Listen geeignet? |
|---|---|---|---|
+ |
Nein | Neue Liste | Ja |
extend() |
Ja, die Zielliste | None als Rückgabewert |
Für jede Quellliste einmal aufrufen |
+= |
Ja, die Liste auf der linken Seite | Verändert die linke Liste direkt | Auf jede Quellliste anwenden |
| Entpacken | Nein | Neue Liste | Ja |
itertools.chain() |
Nein | Iterator | Ja |
| Schleife oder Listenverständnis | Nein | Neue Liste | Ja |
Verwenden Sie + oder Entpacken, wenn Sie eine gut lesbare neue Liste erstellen möchten, und extend() oder +=, wenn Sie eine bestehende Liste erweitern möchten. Wählen Sie itertools.chain(), wenn ein Iterator zum nächsten Verarbeitungsschritt passt. Wandeln Sie ihn mit list() um, wenn der folgende Code Listenindizes oder Listenmethoden benötigt. Die Ansätze unterscheiden sich darin, ob sie Speicher belegen und Eingabelisten verändern. Für keine Eingabegröße und keinen Arbeitsablauf gilt jedoch eine allgemeine Rangfolge der Performance. Wenn Laufzeit oder Speicherbedarf entscheidend sind, messen Sie mit repräsentativen Daten.
Fazit
Für zwei oder mehr Python-Listen erstellen Sie mit + oder durch Entpacken eine neue Liste, verändern mit extend() oder += eine Zielliste und durchlaufen mit itertools.chain() die Elemente verzögert. Eine Schleife oder ein Listenverständnis kann ebenfalls eine neue flache Liste erzeugen, wenn diese Form zum umgebenden Code passt.