Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
stoppt, wenn der kürzere von foo
oder bar
stoppt.
In Python 3 , zip
gibt einen Iterator von Tupeln, wie itertools.izip
in 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 foo
und bar
nicht massiv. Wenn beide massiv sind, zip(foo,bar)
ist das Formen eine unnötig massive temporäre Variable und sollte durch itertools.izip
oder
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)
izip
stoppt, wenn entweder foo
oder bar
erschöpft ist.
izip_longest
stoppt, wenn beide foo
und bar
erschöpft sind. Wenn die kürzeren Iteratoren erschöpft sind, izip_longest
ergibt sich ein Tupel mit None
an der Position, die diesem Iterator entspricht. Sie können auch einen anderen Satz fillvalue
außer None
wenn Sie es wünschen. Die ganze Geschichte finden Sie hier .
Beachten Sie auch, dass zip
und 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
/zip
viel sauberer aussieht)?