首页 > 解决方案 > itertools cycle() 似乎没有开始索引。什么是让循环从 0 以外的任意索引开始的好方法?

问题描述

Pythonitertools cycle()似乎没有使用起始索引。从 0 以外的序列中的任意位置开始的最佳方法是什么cycle(),同时确保循环遍历序列的所有元素?

标签: pythonitertools

解决方案


您可以使用itertools.islice()移动到您想要开始的位置:

from itertools import cycle, islice

l = [1, 2, 3, 4, 5]

c = islice(cycle(l), 2, None)

[next(c) for i in range(10)]
# [3, 4, 5, 1, 2, 3, 4, 5, 1, 2]

另一种选择是在你的周期前加上itertools.chain

from itertools import cycle, chain

l = [1, 2, 3, 4, 5]

c = chain(l[2:], cycle(l))

[next(c) for i in range(10)]
# [3, 4, 5, 1, 2, 3, 4, 5, 1, 2]

推荐阅读