如何将时间间隔分成不同长度的部分?
How to divide time interval into parts of varying length?
我有一个从 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小时。还是有其他方法可以替代 'milestones' 用于此目的?
您可以使用生成器:
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
不是最干净的。但它有效。
>>> 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]
将步数保存在列表中。只需迭代并继续轮流添加它们,直到达到上限。
我有一个从 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小时。还是有其他方法可以替代 'milestones' 用于此目的?
您可以使用生成器:
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
不是最干净的。但它有效。
>>> 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]
将步数保存在列表中。只需迭代并继续轮流添加它们,直到达到上限。