Python无循环迭代列表问题:自定义迭代器重复输出red的修复需求
自定义迭代器重复输出同一元素的问题解决
你的代码问题出在__next__方法里:你只是把self.i的值复制给了局部变量i,自增后没有把更新后的i存回实例的self.i属性。这导致每次调用next()时,self.i始终保持初始值-1,所以每次都取列表的第0个元素(red)。
修正后的代码如下:
class MyNumbers: def __iter__(self): self.a = ['red', 'blue', 'green'] self.i = -1 return self def __next__(self): self.i += 1 if self.i >= len(self.a): raise StopIteration return self.a[self.i] myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter))
修正说明:
- 直接操作实例属性
self.i,自增后的值会被保留,下次调用next()时能继续递增 - 添加了
StopIteration异常抛出,当索引超出列表长度时触发,符合Python迭代器的规范(避免无限迭代)
运行这段代码就能得到你期望的输出:
red
blue
green
内容的提问来源于stack exchange,提问作者rowsen
相关产品推荐
相关产品推荐

