我有两个可迭代对象,我想成对检查它们:
foo = [1, 2, 3]
bar = [4, 5, 6]
for (f, b) in iterate_together(foo, bar):
print("f:", f, " | b:", b)
这应该导致:
f: 1 | b: 4
f: 2 | b: 5
f: 3 | b: 6
一种 方法是迭代索引:
for i in range(len(foo)):
print("f:", foo[i], " | b:", bar[i])
但这对我来说似乎有点不合时宜。有更好的方法吗?
原文由 Nathan Fellman 发布,翻译遵循 CC BY-SA 4.0 许可协议
蟒蛇 3
zip
当foo
或bar
中较短者停止时停止。在 Python 3 中,
zip
返回元组的迭代器,如 Python2 中的itertools.izip
。要获取元组列表,请使用list(zip(foo, bar))
。要压缩直到两个迭代器都用完,您将使用 itertools.zip_longest 。蟒蛇2
在 Python 2 中,
zip
返回一个元组列表。当foo
和bar
不是很大时,这很好。如果它们都是巨大的,则形成zip(foo,bar)
是一个不必要的巨大临时变量,应替换为itertools.izip
或itertools.izip_longest
,而不是返回迭代器, .izip
当foo
或bar
用尽时停止。izip_longest
当foo
和bar
都用尽时停止。当较短的迭代器用尽时,izip_longest
产生一个元组,其中None
在对应于该迭代器的位置。您还可以根据需要设置不同的fillvalue
除了None
。 完整的故事 请看这里。还要注意
zip
和它的zip
-like brethen 可以接受任意数量的迭代作为参数。例如,印刷