HOWTO · Python
Wie man zwei oder mehrere Listen in Python verkettet
Dieses Tutorial führt in die Verkettung von zwei oder mehreren Listen in Python ein und vergleicht die Performance zwischen verschiedenen Methoden
Auf dieser Seite
Eine Liste in Python ist eine Datenstruktur, die eine geordnete Sammlung von Elementen enthält.
Eine Operation zum Zusammenkleben zweier Listen wird verketten genannt. Sie können zwei Listen in Python entweder in-place oder out-of-place verknüpfen.
Angenommen, wir haben zwei Listen, die verkettet werden sollen,
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
Wir könnten mehrere Methoden haben, um sie zu verketten, aber sie unterscheiden sich in der Leistung, wenn die Länge oder die Anzahl der verketteten Listen zunimmt.
Wir stellen diese verschiedenen Methoden vor und geben Ihnen einen Leistungsvergleich.
+ zwei Listen in Python verknüpfen
Der + Operator könnte zwei Listen verknüpfen und eine neue Liste zurückgeben.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
+= um zwei Listen in Python zu verknüpfen
+= ist ähnlich wie die obige Methode, aber es werden die Daten der ersten Liste an Ort und Stelle geändert.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain Methode verkettet zwei Listen in Python
chain aus dem Modul itertools behandelt aufeinanderfolgende Sequenzen als eine einzige Sequenz,
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> import itertools
>>> result = list(itertools.chain(list1, list2))
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain hat einen alternativen Konstruktor - intertools.chain.from_iterable(). Er hat ein einziges iterierbares Argument, dessen Eingaben faul ausgewertet werden.extend() Methode zum Verketten von Listen in Python
Die Methode List extend erweitert die Liste durch Anhängen von Elementen aus der Iterationsliste.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
Sie ändert auch die Daten einer bestehenden Liste an Ort und Stelle, anstatt eine neue Liste zurückzugeben.
[*a, *b] Entpackungsmethode in Python-Listenverkettung
Zusätzliches Entpacken wie * für iterierbare Entpack-Operator und ** für Dictionary-Entpack-Operator sind ab Python 3.5 erweitert, wie in PEP-0448 erklärt wird.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
Diese Methode könnte nicht auf den Fall von N Listen anwendbar sein, es sei denn, Sie möchten jede Liste manuell entpacken.
>>> A = [1,2,3]
>>> B = [4,5,6]
>>> C = [7,8,9]
>>> [*t for t in [A,B,C]]
SyntaxError: iterable unpacking cannot be used in comprehension
Schlussfolgerung
| Version | Vor Ort? | |
|---|---|---|
A + B |
- | Nein |
list(intertools.chain(a,b)) |
>=2.3 | Nein |
[*a, *b] |
>=3.5 | Nein |
a += b |
- | Ja |
a.extend(b) |
- | Ja |
Wir verwenden perfplot Modul bis comapare die Leistung der oben genannten Methoden.
Wie in der Grafik gezeigt, sind die Methoden a.extend(b) und a+b in der Leistung fast gleich und die besten unter allen Methoden. Die list(chain(a,b)) Methode hat die schlechteste Performance.