Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
foo
或中的较短者bar
停止。
在Python 3zip
中,像itertools.izip
在Python2中一样,返回元组的迭代器。要获取元组列表,请使用list(zip(foo, bar))
。要压缩直到两个迭代器都用尽,可以使用
itertools.zip_longest。
Python 2
在Python 2中,zip
返回一个元组列表。当foo
且bar
不是很大时,这很好。如果它们都是大量的,则形成zip(foo,bar)
是不必要的大量临时变量,应将其替换为itertools.izip
或
itertools.izip_longest
,它返回迭代器而不是列表。
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
在foo
或bar
耗尽时停止。
izip_longest
当两个停止foo
和bar
耗尽。当较短的迭代器用尽时,将izip_longest
生成一个元组,None
其位置与该迭代器相对应。您还可以设置不同fillvalue
之外None
,如果你想。看到这里的完整故事。
还要注意zip
,其zip
类似brethen可以接受任意数量的Iterables作为参数。例如,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
版画
1 red manchego
2 blue stilton
3 green brie
izip
(即使izip
/zip
看起来更干净)?