You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:39:18