繁体   English   中英

如何在Python中的给定范围内循环变量

[英]How to cycle a variable in a given range in python

python中有没有一种简单的方法可以在给定范围内循环变量? 例如:给定一个range(),我想要一个变量如下:0 1 2 3 2 1 0 1 2 3 ...直到满足某些条件。

您想cycle序列0, 1, ..., n, n-1, ..., 1 您可以使用chain轻松构建此序列

from itertools import chain, cycle

def make_base_sequence(n):
    base = range(n+1)                   # 0, ..., n
    rev_base = reversed(range(1, n))    # n-1, ..., 1
    return chain(base, rev_base)        # 0, ..., n, n-1, ..., 1

for x in cycle(make_base_sequence(5)):
    print(x)

样品运行:

In [2]: from itertools import chain, cycle
   ...: 
   ...: def make_base_sequence(n):
   ...:     base = range(n+1)
   ...:     rev_base = reversed(range(1, n))
   ...:     return chain(base, rev_base)
   ...: 
   ...: for i, x in enumerate(cycle(make_base_sequence(5))):
   ...:     print(x, end=' ')
   ...:     if i > 20:
   ...:         break
   ...:     
0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 

您需要itertools.cycle() ,请参见此处:

https://docs.python.org/2/library/itertools.html#itertools.cycle

你需要itertools.cycle

演示:

>>> import itertools
>>> count = 0
>>> for x in itertools.cycle(range(3)): 
...     if count == 10:
...         break
...     print x,
...     count += 1
... 
0 1 2 0 1 2 0 1 2 0

itertools.cycle是一个好的开始。 另外,您可以自己编程:

cycle = [0,1,2,3,2,1]
i = 0
while some_condition:
    value = cycle[i]
    i = (i+1) % len(cycle)
    #do stuff
import itertools

def f(cycle_range, condition_func):
    sequence = range(cycle_range) + range(cycle_range)[-2:0:-1]
    cycle_generator = itertools.cycle(sequence)
    while not condition_func():
        yield next(cycle_generator)

def condition_func():
    """Checks some condition"""

本质上,您只想循环并不断检查条件。 并且每次从循环中获得下一个项目。 现在,诚然,有比函数调用更好的检查条件的方法,但这只是一个例子。

import time

def cycle(range_):
    num = -1
    current = 0
    a=time.time()
    while 1:
        print current
        if current in (0, range_):
            num*=-1
        current += num
        if time.time() - a > 0.002:
            break

cycle(3)

输出:

0 1 2 3 2 1 0 1 2 3 2 1 0 1 2 3 2 1 0 1 2 3 2 1 0 1 2 3 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM