是否有可能对迭代器求和?

时间:2014-04-02 01:15:51

标签: python iterator sum

例如,我有以下代码:

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

然后汇总op2op1,例如,但是在第一次收益时,然后对第二次收益做同样的事情,直到i达到3

2 个答案:

答案 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中zipitertools.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中,没有izipzip本身的默认行为与izip的默认行为类似。