我有两个可迭代对象,我想成对地检查它们:
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])
但这对我来说似乎有些不python。有没有更好的方法?
for f, b in zip(foo, bar):
print(f, b)
zip
当较短的 或 停止时停止。foo
bar
在 Python 3 中,返回元组的迭代器,
就像在 Python2 中一样。要获取元组列表
,请使用 。要压缩直到两个迭代器
都用完,您将使用
itertools.zip_longest。zip
itertools.izip
list(zip(foo, bar))
在 Python 2 中,
返回元组列表。这在并且不是很大时很好。如果它们都是巨大的,那么形成是一个不必要的大量
临时变量,应该用 or
代替,它返回一个迭代器而不是列表。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
另请注意,和它的类似 brethen 可以接受任意数量的可迭代对象作为参数。例如zip
zip
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
你想要这个函数。zip
for (f,b) in zip(foo, bar):
print "f: ", f ,"; b: ", b
您应该使用“zip”功能。下面是一个示例,您自己的zip函数的外观
def custom_zip(seq1, seq2):
it1 = iter(seq1)
it2 = iter(seq2)
while True:
yield next(it1), next(it2)
模板简介:该模板名称为【Python 如何并行遍历两个列表?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。