Python 3
for f, b in zip(foo, bar):
print(f, b)
zipstoppt, wenn der kürzere von foooder barstoppt.
In Python 3 , zip
gibt einen Iterator von Tupeln, wie itertools.izipin Python2. Verwenden Sie, um eine Liste der Tupel zu erhalten list(zip(foo, bar)). Und um zu komprimieren, bis beide Iteratoren erschöpft sind, würden Sie
itertools.zip_longest verwenden .
Python 2
In Python 2 , zip
gibt eine Liste von Tupeln. Dies ist in Ordnung, wenn foound barnicht massiv. Wenn beide massiv sind, zip(foo,bar)ist das Formen eine unnötig massive temporäre Variable und sollte durch itertools.izipoder
ersetzt werden itertools.izip_longest, was einen Iterator anstelle einer Liste zurückgibt.
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izipstoppt, wenn entweder foooder barerschöpft ist.
izip_longeststoppt, wenn beide foound barerschöpft sind. Wenn die kürzeren Iteratoren erschöpft sind, izip_longestergibt sich ein Tupel mit Nonean der Position, die diesem Iterator entspricht. Sie können auch einen anderen Satz fillvalueaußer Nonewenn Sie es wünschen. Die ganze Geschichte finden Sie hier .
Beachten Sie auch, dass zipund sein zipähnliches brethen eine beliebige Anzahl von Iterablen als Argumente akzeptieren kann. Zum Beispiel,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
druckt
1 red manchego
2 blue stilton
3 green brie
izip(obwohl dieizip/zipviel sauberer aussieht)?