简体   繁体   English

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

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

is there an easy way in python to cycle a variable in a given range? python中有没有一种简单的方法可以在给定范围内循环变量? For example: Given a range(), I want a variable goes like this: 0 1 2 3 2 1 0 1 2 3... till some conditions are satisfied. 例如:给定一个range(),我想要一个变量如下:0 1 2 3 2 1 0 1 2 3 ...直到满足某些条件。

You want to cycle the sequence 0, 1, ..., n, n-1, ..., 1 . 您想cycle序列0, 1, ..., n, n-1, ..., 1 You can easily build this sequence using chain 您可以使用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)

Sample run: 样品运行:

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 

You want itertools.cycle() , see here: 您需要itertools.cycle() ,请参见此处:

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

you need itertools.cycle : 你需要itertools.cycle

demo: 演示:

>>> 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 is a good start. itertools.cycle是一个好的开始。 Else you can program it yourself: 另外,您可以自己编程:

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"""

Essentially, you just want to loop and constantly check the condition. 本质上,您只想循环并不断检查条件。 And each time yeild the next item from the cycle. 并且每次从循环中获得下一个项目。 Now, admittedly there are better ways to check a condition than a function call, but this is just an example. 现在,诚然,有比函数调用更好的检查条件的方法,但这只是一个例子。

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)

output: 输出:

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