相关疑难解决方法(0)

为什么zip()会丢弃我的生成器的值?

当我注意到我的简单实现没有产生正确的结果时,我正在写这个问题的答案.在追捕这个bug时,我注意到以下内容:

In [1]: import itertools
In [2]: gen = itertools.cycle((0,1,2))

In [3]: zip(gen, range(3))
Out[3]: [(0, 0), (1, 1), (2, 2)]

In [4]: zip(gen, range(3))
Out[4]: [(1, 0), (2, 1), (0, 2)]
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,gennext()方法被称为一个additioinal时间.为了说明这一点,我使用了以下内容:

class loudCycle(itertools.cycle):
    def next(self):
        n = super(loudCycle, self).next()
        print n
        return n

In [6]: gen = loudCycle((0,1,2))
In [7]: zip(gen, range(3))
0
1
2
0
Out[7]: [(0, 0), (1, 1), (2, 2)]
Run Code Online (Sandbox Code Playgroud)

python

10
推荐指数
2
解决办法
1048
查看次数

标签 统计

python ×1