为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2019-02-26 02:13:33
Hi,在python中有简单的写法可以让我在给定范围内往复循环一个变量吗? 如,给定range(4),我希望变量像这样变化: 0,1,2,3,2,1,0,1,2,3....直到变化指定的次数或者其它条件满足为止。
查看完整描述

4 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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]
查看完整回答
反对 回复 2019-03-01
?
至尊宝的传说

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

查看完整回答
反对 回复 2019-03-01
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-01
?
猛跑小猪

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
查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 1253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信