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

时间:2017-06-07 17:45:38

标签: python python-3.x math numerical-integration

我有一个从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小时。或者是否可以替代使用“里程碑”来实现此目的?

2 个答案:

答案 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]

将步骤值保存在列表中。只需迭代并继续将它们添加到旋转状态,直到你达到上限。