可以汇总迭代器吗?

提问

例如,我有以下代码:

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相加,例如,但具有第一个收益率,然后对第二个收益率做同样的事情,直到我命中3

最佳答案

您可以使用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导入izip
对于izip(functionx(3),functionx(3))中的i,m:
    打印“ Sum”,我是

输出量

5
5
Sum 10
7
7
Sum 14
9
9
Sum 18

如您所见,itertools.izip仅在需要时进行迭代.

注意:在Python 3.x中,没有izip,zip本身的默认行为与izip相似.