首页 > 解决方案 > 为什么 Python 迭代器只输出奇数或偶数?

问题描述

我在 Python 中使用迭代器时遇到问题。我只想打印数字 1 到 20,但我的代码只给了我奇数或偶数。为什么会出现这种情况?

我也尝试过跟踪它,但我仍然没有得到我期望的答案。

class mynumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        #print(a)   for tracking purpose
        if(self.a<=20):
            x = self.a
            self.a +=1
            #print('loop1')
            return x
        else:
            #print('loop2')
            raise StopIteration

myclass = mynumbers()
myiter = iter(myclass)
for y in myiter:
    print(next(myiter))

这个程序打印偶数。如果我将值更改a为 0,那么它会给出奇数。但我想要所有的数字,比如 1,2,3,...20。

标签: python-3.xiterator

解决方案


在代码中

for y in myiter:
    print(next(myiter))

无需调用next(),这会导致所有其他元素都被跳过。只需使用:

for y in myiter:
    print(y)

next()在引擎盖下为您调用。

您可以直接使用的一种情况next()是当您在循环构造之外时:

>>> from itertools import combinations
>>> it = combinations("abcd", 2)
>>> next(it)
('a', 'b')
>>> next(it)
('a', 'c')
>>> # some time later...
... next(it)
('a', 'd')
>>> # some time later, exhaust the rest:
... list(it)
[('b', 'c'), ('b', 'd'), ('c', 'd')]

推荐阅读