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

如何实现可循环数字迭代器:调用.next()时从9自动回到0?

实现轻量级循环0-9的迭代器

这题太对我胃口了!完全懂你不想用itertools.cycle([0,1,...,9])的原因——每个迭代器都存一份完整的列表,当你要创建成百上千个实例时,内存浪费确实没必要。咱们自己写个极简的迭代器类就行,每个实例只维护一个当前状态的整数,用你说的模运算逻辑循环,内存开销几乎可以忽略。

核心实现代码

直接上最贴合你需求的版本,专门针对0-9循环:

class Cycle0To9:
    def __init__(self):
        # 初始设为9,这样第一次调用next()会返回0,符合直觉
        self.current = 9

    def __iter__(self):
        # 迭代器协议要求返回自身
        return self

    def __next__(self):
        # 核心逻辑:加1后取模10,自动循环
        self.current = (self.current + 1) % 10
        return self.current

测试用法

你可以像这样调用它:

# 创建一个迭代器实例
counter = Cycle0To9()

# 手动调用next()测试
print(next(counter))  # 输出 0
print(next(counter))  # 输出 1
# 连续调用到9之后
for _ in range(8):
    next(counter)
print(next(counter))  # 输出 9
print(next(counter))  # 输出 0,完美循环回去了

为什么这个方案适合你?

  • 内存友好:每个Cycle0To9实例只保存一个整数(self.current),不管创建多少个,内存占用都微乎其微,完全不会出现重复列表占用内存的问题。
  • 逻辑清晰:完全遵循你想要的x + 1 % 10循环逻辑,没有多余的依赖。
  • 符合迭代器协议:可以直接用在for循环里,和Python原生迭代器用法一致:
    # 用在for循环中,循环输出5次
    counter = Cycle0To9()
    for _ in range(5):
        print(next(counter))  # 0,1,2,3,4
    

扩展:通用循环范围迭代器

如果以后需要其他范围的循环(比如2-4,或者10-15),可以改成带参数的通用版本,逻辑同样简单:

class CyclicRangeIterator:
    def __init__(self, start=0, end=10):
        # end是开区间,比如end=10对应0-9,end=5对应start到4
        self.start = start
        self.end = end
        # 初始值设为end-1,确保第一次next返回start
        self.current = end - 1

    def __iter__(self):
        return self

    def __next__(self):
        self.current += 1
        # 到达边界后跳回起点
        if self.current >= self.end:
            self.current = self.start
        return self.current

用法示例:

# 循环2、3、4
counter = CyclicRangeIterator(start=2, end=5)
print(next(counter))  # 2
print(next(counter))  # 3
print(next(counter))  # 4
print(next(counter))  # 2,循环生效

内容的提问来源于stack exchange,提问作者Tryer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:49