Hi,在python中有简单的写法可以让我在给定范围内往复循环一个变量吗?
如,给定range(4),我希望变量像这样变化:
0,1,2,3,2,1,0,1,2,3....直到变化指定的次数或者其它条件满足为止。
4 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
python
import itertools def bounce(interval): """Infinite bounce for specific range list.""" down = reversed(interval[1:-1]) return itertools.cycle(itertools.chain(interval, down)) # >>> list(itertools.islice(bounce(range(5)), 20)) # [0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3]
至尊宝的传说
TA贡献1789条经验 获得超10个赞
itertools.cycle(iterable)
Make an iterator returning elements from the iterable and saving a copy of each. When the iterable is exhausted, return elements from the saved copy. Repeats indefinitely. Equivalent to:
def cycle(iterable):
# cycle('ABCD') --> A B C D A B C D A B C D ...
saved = []
for element in iterable:
yield element
saved.append(element)
while saved:
for element in saved:
yield element
Note, this member of the toolkit may require significant auxiliary storage (depending on the length of the iterable).
猛跑小猪
TA贡献1858条经验 获得超8个赞
其实我想要的是从小到大,再从大到下,再从小到大,并不是直接重复的过程。
我后来自己想了一个实现
from itertools import cycle, chain
# Get a sequence like (0,1,2,3,2,1)
base_sequence = chain(range(n), range(n - 2, 0, -1))
for i in cycle(base_sequence):
# do something
if condition_satisfied:
break
添加回答
举报
0/150
提交
取消