Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
zatrzymuje się, gdy krótszy foo
lub bar
zatrzymuje się.
W Pythonie 3 , zip
zwraca iterator krotek, jak itertools.izip
w python2. Aby uzyskać listę krotek, użyj list(zip(foo, bar))
. Aby skompresować plik do wyczerpania obu iteratorów, należy użyć
itertools.zip_longest .
Python 2
W Pythonie 2 , zip
zwraca listę krotek. To dobrze, kiedy foo
i bar
nie są ogromne. Jeśli oba są masywne, wówczas formowanie zip(foo,bar)
jest niepotrzebnie masywną zmienną tymczasową i powinno zostać zastąpione przez itertools.izip
lub
itertools.izip_longest
, która zwraca iterator zamiast listy.
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
zatrzymuje się, gdy jeden foo
lub bar
jest wyczerpany.
izip_longest
zatrzymuje się, gdy oba foo
i bar
są wyczerpane. Kiedy krótsze iteratory są wyczerpane, izip_longest
daje krotkę None
w pozycji odpowiadającej temu iteratorowi. Można również ustawić inny fillvalue
oprócz None
jeśli chcesz. Zobacz tutaj pełną historię .
Zauważ też, że zip
i zip
podobnie do niego, może przyjmować dowolną liczbę iterowalnych argumentów. Na przykład,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
odciski
1 red manchego
2 blue stilton
3 green brie
izip
(nawet jeśliizip
/zip
wygląda na znacznie czystszą)?