首页 > python中有办法在给定范围内往复循环一个变量吗?

python中有办法在给定范围内往复循环一个变量吗?

Hi,在python中有简单的写法可以让我在给定范围内往复循环一个变量吗?
如,给定range(4),我希望变量像这样变化:
0,1,2,3,2,1,0,1,2,3....直到变化指定的次数或者其它条件满足为止。


其实我想要的是从小到大,再从大到下,再从小到大,并不是直接重复的过程。

我后来自己想了一个实现

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

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).


只是整数的话,直接取余就行


pythonimport 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]
【热门文章】
【热门文章】