我有两个Python中的iterables,我想两人一组地讨论它们:
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]
但这对我来说有点不合逻辑。有更好的办法吗?
Tags:
您需要
zip
函数。Python3
当
foo
或bar
中的较短者停止时,zip
停止。在Python 3中,^{}
返回元组的迭代器,如Python2中的
itertools.izip
。得到一份清单 对于元组,使用list(zip(foo, bar))
。压缩,直到两个迭代器都 筋疲力尽,你会用 itertools.zip_longest。Python2
在Python 2中,^{}
返回元组列表。当
foo
和bar
不是大质量的时候,这是很好的。如果它们都是巨大的,那么形成zip(foo,bar)
是不必要的巨大 临时变量,应替换为itertools.izip
或itertools.izip_longest
,它返回一个迭代器而不是一个列表。当
foo
或bar
耗尽时,izip
停止。izip_longest
在耗尽foo
和bar
时停止。 当较短的迭代器耗尽时,izip_longest
产生一个元组,其中None
位于该迭代器对应的位置。如果您愿意,还可以设置一个不同的fillvalue
和None
。请看这里的full story。还要注意
zip
及其类似于zip
的brethen可以接受任意数量的iterable作为参数。例如印刷品
您应该使用zip函数。下面是一个示例,说明您自己的zip函数的外观
相关问题 更多 >
编程相关推荐