python - Infinite cycle over a range starting at a particular number -
say have range:
r = range(1, 6)
using range, want cycle infinitely , yield numbers come:
for in cycle(r): yield(i)
this correctly produce values of:
1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, ...
however, want start yielding specific value continue on range it's defined. is, if want start @ 3
, sequence be:
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, ...
is there way combination of range
, cycle
(or other way)?
just dropwhile
until reach first value want emit:
>>> itertools import cycle, dropwhile >>> iterable = dropwhile(lambda x: x < 3, cycle(range(1, 6))) >>> _ in range(10): ... print(next(iterable)) ... 3 4 5 1 2 3 4 5 1 2
per docs (emphasis mine):
make iterator drops elements iterable long predicate true; afterwards, returns every element.
the predicate
takes effect until first value evaluates false-y.
Comments
Post a Comment