【问题标题】:How to divide time interval into parts of varying length?如何将时间间隔分成不同长度的部分?
【发布时间】:2017-11-09 05:03:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用生成器:

    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
    

    【讨论】:

      【解决方案2】:

      不是最干净的。但它有效。

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

      将您的步长值保存在列表中。只需迭代并不断添加它们,直到达到上限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        相关资源
        最近更新 更多