Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
si interrompe quando il più breve foo
o si bar
ferma.
In Python 3 , zip
restituisce un iteratore di tuple, come itertools.izip
in Python2. Per ottenere un elenco di tuple, utilizzare list(zip(foo, bar))
. E per comprimere fino a quando entrambi gli iteratori sono esauriti, dovresti usare
itertools.zip_longest .
Python 2
In Python 2 , zip
restituisce un elenco di tuple. Questo va bene quando foo
e bar
non sono enormi. Se sono entrambi massicci, la formazione zip(foo,bar)
è una variabile temporanea inutilmente massiccia e deve essere sostituita da itertools.izip
o
itertools.izip_longest
, che restituisce un iteratore anziché un elenco.
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
si ferma quando uno foo
o bar
è esaurito.
izip_longest
si ferma quando entrambi foo
e bar
sono esauriti. Quando gli iteratori più corti sono esauriti, izip_longest
produce una tupla con None
nella posizione corrispondente a quell'iteratore. È anche possibile impostare un diverso fillvalue
oltre None
se lo si desidera. Vedi qui per la storia completa .
Si noti inoltre che zip
e il suo zip
simile brethen può accettare un numero arbitrario di iterabili come argomenti. Per esempio,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
stampe
1 red manchego
2 blue stilton
3 green brie
izip
quello (anche se ilizip
/zip
sembra molto più pulito)?