HOWTO · Python
Wie man mehrere Listen in Python durchschleifen kann
Es wird demonstriert, wie die zip() Funktion und ihre Geschwister verwendet werden können, um durch mehrere iterable in Python zu iterieren. Enthält auch Code-Schnipsel der Funktionen zip(), itertools.izip() und itertools.zip_longest() und erklärt, wie sie sowohl in Python 2 als auch in Python 3 verwendet werden können.
Auf dieser Seite
Dieses Tutorial erklärt, wie man in Python gleichzeitig durch zwei Listen/Tupel iteriert. Wir werden zip() und itertools.zip_longest() verwenden und die Unterschiede zwischen ihnen und die Verwendung jeder einzelnen Liste/Tupel erklären. Wir werden auch sehen, wie sich der Rückgabetyp zip() in Python 2 und 3 unterscheidet.
zip() Funktion in Python 3.x
Die Funktion zip() akzeptiert mehrere Listen/Tupel als Argumente und gibt ein zip-Objekt zurück, das ein Iterator von Tupeln ist.
Verwenden Sie zip(), um durch zwei Listen zu iterieren
Übergeben Sie beide Listen an die Funktion zip() und verwenden Sie for-Schleife, um durch den Ergebnis-Iterator zu iterieren.
listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]
for a, b in zip(listA, listB):
print(a, b)
Ausgabe:
1 10
2 20
3 30
4 40
Verwenden Sie zip(), um durch zwei Listen mit unterschiedlicher Länge zu iterieren
Wenn Listen unterschiedliche Längen haben, hört zip() auf, wenn die kürzeste Liste endet. Siehe den Code unten.
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in zip(listA, listB):
print(a, b)
Ausgabe:
1 10
2 20
3 30
4 40
Verwenden Sie itertools.zip_longest(), um durch zwei Listen zu iterieren
Wenn Sie durch zwei Listen iterieren müssen, bis die längste endet, verwenden Sie itertools.zip_longest(). Es funktioniert genau wie die zip() Funktion, außer dass es anhält, wenn die längste Liste endet.
Sie füllt die leeren Werte mit None auf und gibt einen Iterator von Tupeln zurück.
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in itertools.zip_longest(listA, listB):
print(a, b)
Ausgabe:
1 10
2 20
3 30
4 40
5 None
6 None
Der voreingestellte fillvalue ist None, aber Sie können fillvalue auf einen beliebigen Wert setzen.
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in itertools.zip_longest(listA, listB, fillvalue=0):
print(a, b)
Ausgabe:
1 10
2 20
3 30
4 40
5 0
6 0
Verwendung von zip() mit mehreren Listen
zip() und seine Geschwisterfunktionen können mehr als zwei Listen akzeptieren.
import itertools
codes = [101, 102, 103]
students = ["James", "Noah", "Olivia"]
grades = [65, 75, 80]
for a, b, c in itertools.zip_longest(codes, students, grades, fillvalue=0):
print(a, b, c)
Ausgabe:
101 James 65
102 Noah 75
103 Olivia 80
zip() Funktion in Python 2.x
Die Funktion zip() in Python 2.x akzeptiert auch mehrere Listen/Tupel als Argumente, gibt aber eine Liste von Tupeln zurück. Das funktioniert gut für kleine Listen, aber wenn Sie große Listen haben, sollten Sie stattdessen itertools.izip() verwenden, weil es einen Iterator von Tupeln zurückgibt.
Verwenden Sie itertools.izip(), um durch zwei Listen zu iterieren
import itertools
listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]
for a, b in itertools.izip(listA, listB):
print(a, b)
Ausgabe:
1 10
2 20
3 30
4 40