In Python aggregiert die eingebaute Funktion zip() mehrere iterierbare Objekte (Listen, Tupel usw.). Sie können mehrere Listen in der For-Schleife mit zip() durchlaufen.
Dieser Artikel hat folgenden Inhalt.
- Iterieren Sie zwei, drei oder mehr Listen mit zip()
- Für den Fall, dass die Anzahl der Elemente unterschiedlich ist
- zip() ignoriert die zusätzlichen Elemente
- itertools.zip_longest() füllt die fehlenden Elemente aus
- Rufen Sie eine Liste mit mehreren iterierbaren Elementen ab
Iterieren Sie zwei, drei oder mehr Listen mit zip()
Indem Sie zwei Listen an zip() übergeben, can Sie you in the for-Schleife iterieren.
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]
for name, age in zip(names, ages):
print(name, age)
# Alice 24
# Bob 50
# Charlie 18
Gleiches gilt nicht nur für zwei Listen, sondern auch für drei oder mehr Listen.
points = [100, 85, 90]
for name, age, point in zip(names, ages, points):
print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90
Sie können andere iterierbare Objekte sowie Listen angeben.
Für den Fall, dass die Anzahl der Elemente unterschiedlich ist
Wenn die Anzahl der Elemente jedes iterierbaren Objekts unterschiedlich ist, ignoriert zip() die zusätzlichen Elemente.
names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]
for name, age in zip(names, ages):
print(name, age)
# Alice 24
# Bob 50
# Charlie 18
itertools.zip_longest() füllt die fehlenden Elemente aus
Mit itertools.zip_longest() can SIE sterben fehlenden Elemente mit irgendwelchen Werten füllen.
Standardmäßig ist es mit None gefüllt.
from itertools import zip_longest
names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]
for name, age in zip_longest(names, ages):
print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave None
Sie können den zu füllenden Wert im Parameter fillvalue angeben.
for name, age in zip_longest(names, ages, fillvalue=20):
print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave 20
Der zu füllende Wert ist einheitlich, auch wenn mehrere Listen mit unzureichenden Elementen vorhanden sind. Sie können keine anderen Werte angeben.
points = [100, 85]
for name, age, point in zip_longest(names, ages, points, fillvalue=20):
print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 20
# Dave 20 20
Wenn SIE mehrere Listen mit unbekannter Anzahl von Elementen mit unterschiedlichen Werten füllen möchten, gehen Sie wie folgt vor.
- Definieren Sie den Wert, der für alle Listen ausgefüllt werden soll
- Holen Sie sich die maximale Anzahl von Elementen
- Füllen Sie alle Listen bis zur maximalen Anzahl von Elementen
- Mit zip() aggregieren
fill_name = 'XXX'
fill_age = 20
fill_point = 50
len_names = len(names)
len_ages = len(ages)
len_points = len(points)
max_len = max(len_names, len_ages, len_points)
names = names + [fill_name] * (max_len - len_names)
ages = ages + [fill_age] * (max_len - len_ages)
points = points + [fill_point] * (max_len - len_points)
print(names)
print(ages)
print(points)
# ['Alice', 'Bob', 'Charlie', 'Dave']
# [24, 50, 18, 20]
# [100, 85, 50, 50]
for name, age, point in zip(names, ages, points):
print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50
Der Vorgang des Füllens der Liste mit der maximalen Anzahl von Elementen used sterben Initialisierung and Verkettung of Listen.
Es kann eine Funktion wie diese sein:
def my_zip_longest(iterables, fillvalues):
max_len = max(len(i) for i in iterables)
return zip(*[list(i) + [v] * (max_len - len(i)) for i, v in zip(iterables, fillvalues)])
for name, age, point in my_zip_longest((names, ages, points), ('XXX', 20, 50)):
print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50
Es verwendet List Comprehensions und List Unpacking by *.
Rufen Sie eine Liste mit mehreren iterierbaren Elementen ab
zip gibt einen Iterator (Zip-Objekt) zurück, der ein Tupel mit den mehreren Elementen iterierbarer Objekte enthält.
names = ['Alice', 'Bob', 'Charlie']
ages = (24, 50, 18)
z = zip(names, ages)
print(z)
print(type(z))
#
# <class 'zip'>
Sie können mit list() in eine Liste umgewandelt werden.
l = list(zip(names, ages))
print(l)
print(type(l))
print(type(l[0]))
# [('Alice', 24), ('Bob', 50), ('Charlie', 18)]
# <class 'list'>
# <class 'tuple'>