如何将时间间隔分成不同长度的部分?

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]

将步数保存在列表中。只需迭代并继续轮流添加它们,直到达到上限。