例如,我有以下代码:
def functionx(n):
i = 0
while i < 3:
n += 2
yield n
i += 1
for i in functionx(x):
op2 = i
for m in functionx(y):
op1 = m
然后汇总op2
和op1
,例如,但是在第一次收益时,然后对第二次收益做同样的事情,直到i
达到3
答案 0 :(得分:2)
for i,m in zip(functionx(x), functionx(y)):
result = i + m
编辑:Aaron Hall提出了一个很好的观点 - 如果一个生成的序列比另一个更长,那么您可能希望
# from itertools import izip_longest as zl # Python 2.x
from itertools import zip_longest as zl # Python 3.x
for i,m in zl(functionx(x), functionx(y), fillvalue=0):
result = i + m
答案 1 :(得分:2)
您可以使用itertools.izip
。它完成你正在寻找的东西。它同时迭代两个迭代器,但是很懒惰。
from itertools import izip
for i, m in izip(functionx(x), functionx(y)):
print i + m
Python 2.x中zip
和itertools.izip
之间的差异是
def functionx(n):
i = 0
while i < 3:
n += 2
print n
yield n
i += 1
使用zip
,
for i, m in zip(functionx(3), functionx(3)):
print "Sum", i + m
<强>输出强>
5
5
7
7
9
9
Sum 10
Sum 14
Sum 18
使用itertools.izip
,
来自itertools import izip for i,m in izip(functionx(3),functionx(3)): 打印“Sum”,i + m
<强>输出强>
5
5
Sum 10
7
7
Sum 14
9
9
Sum 18
如您所见,itertools.izip
仅按要求进行迭代。
注意:在Python 3.x中,没有izip
,zip
本身的默认行为与izip
的默认行为类似。