[英]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.