我在Python中有两个迭代,我想成对地遍历它们:
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print "f: ", f, "; b: ", b
它应该导致:
f: 1; b: 4
f: 2; b: 5
f: 3; b: 6
一种方法是迭代索引:
for i in xrange(len(foo)):
print "f: ", foo[i], "; b: ", b[i]
但这对我来说似乎有点不合时宜 . 有没有更好的方法呢?
7 回答
当
foo
或bar
中的较短者停止时zip
停止 .在 Python 2 中,zip返回元组列表 . 当
foo
和bar
不大时,这很好 . 如果它们都是大规模的那么形成zip(foo,bar)
是一个不必要的大量临时变量,应该被itertools.izip
或itertools.izip_longest
替换,它返回迭代器而不是列表 .当
foo
或bar
用尽时izip
停止 . 当foo
和bar
都用完时izip_longest
停止 . 当较短的迭代器耗尽时,izip_longest
会在与该迭代器对应的位置产生一个None
的元组 . 如果您愿意,还可以在None
之外设置不同的fillvalue
. 请参阅此处查看full story .在 Python 3 中,zip返回元组的迭代器,如Python2中的
itertools.izip
. 要获取元组列表,请使用list(zip(foo, bar))
. 并且要压缩直到两个迭代器都耗尽,你将使用itertools.zip_longest .还要注意
zip
及其zip
-like brethen可以接受任意数量的iterables作为参数 . 例如,版画
你想要
zip
功能 .内置
zip
完全符合您的要求 . 如果你想要相同的迭代而不是列表,你可以看看itertools.izip,它做同样的事情,但一次给出一个结果 .您正在寻找的是zip .
你应该使用'zip'功能 . 以下是您自己的zip功能的示例
zip功能解决了这个问题
文件:ZIP Library function
目的:并排输出问题:
输出:
review1
review2
review3
DATE1
DATE2
DATE3
解:
输出:
review1:DATE1
review2:DATE2
review3:DATE3