如何在Python中实现0,1,2,1,0…的往返循环迭代器?
实现往返遍历的迭代器
你需要的是乒乓式(往返)循环的迭代器,itertools.cycle默认是从头重复序列,要实现0,1,2,1,0,1,2,1,0…的效果,只需要先构造一个往返的基础序列,再用cycle循环这个序列即可。
解决方案代码
from itertools import cycle # 构造往返基础单元:0,1,2,1 base_seq = list(range(3)) + list(range(1, 0, -1)) myIterator = cycle(base_seq) # 测试输出 print(next(myIterator)) # 0 print(next(myIterator)) # 1 print(next(myIterator)) # 2 print(next(myIterator)) # 1 print(next(myIterator)) # 0 print(next(myIterator)) # 1
通用函数封装
如果需要适配任意长度的序列,可以封装成通用函数:
from itertools import cycle def ping_pong_cycle(n): if n <= 1: return cycle(range(n)) # 长度≤1时直接循环原序列 # 生成基础往返序列:升序到n-1,再降序到1 base_seq = list(range(n)) + list(range(n-2, 0, -1)) return cycle(base_seq) # 使用示例 iterator = ping_pong_cycle(3) for _ in range(8): print(next(iterator)) # 输出:0 1 2 1 0 1 2 1
原理很简单:先创建一个包含一次完整往返的序列(比如[0,1,2,1]),再让cycle重复这个序列,就能实现你要的往返遍历效果。
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

