for f, b in zip(foo, bar):
print(f, b)
zip
停止時的foo
或bar
停止越短。
Python 2,zip
返回元組列表。當foo
和bar
不是很大時,這很好。如果 它們都很大,那麼形成zip(foo,bar)
是一個不必要的龐大的 臨時變量,應該替換爲itertools.izip
或 itertools.izip_longest
,它將返回一個迭代器而不是一個列表。當任一或foo
bar
耗盡
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
停止。 當較短的迭代器耗盡時,izip_longest
會在與該迭代器相對應的位置產生一個元組None
。如果您願意,您還可以設置除None
之外的其他fillvalue
。看到這裏的。
在Python 3中,zip
返回的元組的迭代器,像在Python2 itertools.izip
。要獲取元組的列表 ,請使用list(zip(foo, bar))
。並且要壓縮,直到兩個迭代器都被耗盡,您將使用 itertools.zip_longest。
還要注意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
@unutbu在Python 3中,函數名是'itertools.zip_longest',而不是'itertools.izip_longest'(基本上'zip ...'而不是'itertools'模塊中的'izip ...')。這是一個單獨的字符編輯,否則我會自己編輯超級小調整到你的答案中。 – 2014-10-15 20:04:21
@MichaelA:感謝您的糾正。 – unutbu 2014-10-15 20:25:11
@unutbu爲什麼我會更喜歡OP的方法而不是'izip'(即使'izip' /'zip'看起來更乾淨)? – armundle 2016-03-14 19:23:08