2017-06-07 6 views
3

私は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でこれをしますか?


考え方は、各サイクルはそれぞれ2.25時間、2.25時間、1.5時間続く3つの連続操作から成る、6時間のサイクルに時間を分割することです。または、この目的のために 'マイルストーン'を使用する代わりに使用できますか?

答えて

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

not c最も薄い。しかし、それは動作します。

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

リストにステップ値を保存します。あなたがキャップを叩くまで、反復して回転を続けるだけです。

関連する問題