我有一个从0到t
的时间间隔。
我希望以下列方式将此间隔划分为2.25,2.25和1.5的循环中的累积序列:
输入:
start = 0
stop = 19
输出:
sequence = [0, 2.25, 4.5, 6, 8.25, 10.5, 12, 14.25, 16.5, 18, 19]
我怎样才能在Python中执行此操作?
这个想法是将一个时间段分成6个小时的周期,每个周期由三个连续的操作组成,分别持续2.25小时,2.25小时和1.5小时。或者是否可以替代使用“里程碑”来实现此目的?
答案 0 :(得分:3)
您可以使用生成器:
def interval(start, stop):
cur = start
yield cur # return the start value
while cur < stop:
for increment in (2.25, 2.25, 1.5):
cur += increment
if cur >= stop: # stop as soon as the value is above the stop (or equal)
break
yield cur
yield stop # also return the stop value
它适用于你提议的开始和停止:
>>> list(interval(0, 19))
[0, 2.25, 4.5, 6.0, 8.25, 10.5, 12.0, 14.25, 16.5, 18.0, 19]
您也可以使用itertools.cycle
来避免外部循环:
import itertools
def interval(start, stop):
cur = start
yield start
for increment in itertools.cycle((2.25, 2.25, 1.5)):
cur += increment
if cur >= stop:
break
yield cur
yield stop
答案 1 :(得分:1)
不是最干净的。但它的确有效。
>>> start = 0
>>> stop = 19
>>> step = [2.25, 2.25, 1.5]
>>> L = [start]
>>> while L[-1] <= stop:
... L.append(L[-1] + step[i % 3])
... i += 1
...
>>> L[-1] = stop
>>> L
[0, 2.25, 4.5, 6.0, 8.25, 10.5, 12.0, 14.25, 16.5, 18.0, 19]
将步骤值保存在列表中。只需迭代并继续将它们添加到旋转状态,直到你达到上限。