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ą)?zip
izip
podobne funkcje zitertools
akceptowania dowolnej liczby iteracji, a nie tylko 2? To pytanie jest teraz kanoniczne, a Twoja odpowiedź jest jedyną wartą zaktualizowania.i
? Czy mogę owinąć ten zip w wyliczenie?for i, (f, b) in enumerate(zip(foo, bar))
.Chcesz tę
zip
funkcję.źródło
itertools.izip
jeśli masz dużą liczbę elementów.Powinieneś użyć funkcji „ zip ”. Oto przykład, jak może wyglądać Twoja własna funkcja zip
źródło
zip(seq1, seq2)
?Możesz połączyć n-ty element w krotkę lub listę za pomocą zrozumienia, a następnie przekazać je za pomocą funkcji generatora.
źródło
W przypadku, gdy ktoś szuka czegoś takiego, uznałem to za bardzo proste i łatwe:
Listy będą iterowane z pełną zawartością, w przeciwieństwie do zip (), który iteruje tylko do minimalnej długości treści.
źródło
Oto jak to zrobić ze zrozumieniem listy:
drukuje:
źródło