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)?zip
undzip
ähnliche Funktionenitertools
eine beliebige Anzahl von Iterablen akzeptieren und nicht nur 2? Diese Frage ist jetzt kanonisch und Ihre Antwort ist die einzige, die aktualisiert werden sollte.i
? Kann ich diesen Reißverschluss in eine Aufzählung einwickeln?for i, (f, b) in enumerate(zip(foo, bar))
.Sie wollen die
zip
Funktion.quelle
itertools.izip
wenn Sie eine große Anzahl von Elementen haben.Sie sollten die Zip -Funktion verwenden. Hier ist ein Beispiel, wie Ihre eigene Zip-Funktion aussehen kann
quelle
zip(seq1, seq2)
?Sie können die n-ten Elemente mithilfe des Verständnisses zu einem Tupel oder einer Liste bündeln und sie dann mit einer Generatorfunktion verteilen.
quelle
Für den Fall, dass jemand so etwas sucht, fand ich es sehr einfach und leicht:
Die Listen werden mit ihrem vollständigen Inhalt iteriert, im Gegensatz zu zip (), das nur bis zur minimalen Inhaltslänge iteriert.
quelle
So geht's mit Listenverständnis:
Drucke:
quelle