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]
Informationen
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.

Warnung
Iterationsfähiges Auspacken kann nicht zum Verständnis verwendet werden, wie unten demonstriert wird.
>>> 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.

Python-Listenverkettungs-Methoden Leistungsvergleich

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.