如何在itertools.cycle函数中指定从何处开始


问题内容

我需要遍历列表以开始1-4 使用之间的位置itertools我可以遍历该列表

positions = itertools.cycle([1,2,3,4])
next(positions)

这确实会返回下一个位置,但是如果下次我需要从3开始时该怎么办?如何设置开始位置?

我需要经常更改开始位置,我不能只更改列表从3开始。


问题答案:

您无法设置起始位置;它总是在给定序列开始的地方开始。

在将循环用于任何需要的用途之前,您 可以
按照几个步骤进行移动。使用itertools.islice()跳过一些项目:

from itertools import islice

starting_at_three = islice(positions, 2, None)

您传入可迭代的值,然后传入一个起始值和终止值;None此处意味着islice()迭代器永远持续下去,或者直到基础positions迭代器用完为止。

演示:

>>> from itertools import islice, cycle
>>> positions = cycle([1, 2, 3, 4])
>>> starting_at_three = islice(positions, 2, None)
>>> next(starting_at_three)
3
>>> next(starting_at_three)
4
>>> next(starting_at_three)
1

另一种选择是按照不同的顺序传递;[3, 4, 1, 2]例如,您可以传递。