¿Cómo dividir el intervalo de tiempo en partes de longitud variable?

Tengo un intervalo de tiempo de 0 a t . Quiero dividir este intervalo en una secuencia acumulativa en un ciclo de 2.25, 2.25 y 1.5, de la siguiente manera:

entrada:

 start = 0 stop = 19 

salida:

 sequence = [0, 2.25, 4.5, 6, 8.25, 10.5, 12, 14.25, 16.5, 18, 19] 

¿Cómo puedo hacer esto en Python?


La idea es dividir un período de tiempo en ciclos de 6 horas, cada ciclo consta de tres operaciones secuenciales que duran 2,25 h, 2,25 hy 1,5 h respectivamente. ¿O hay una alternativa al uso de “hitos” para este propósito?

Podrías usar un generador:

 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 

Funciona para el inicio y para el paro propuesto:

 >>> list(interval(0, 19)) [0, 2.25, 4.5, 6.0, 8.25, 10.5, 12.0, 14.25, 16.5, 18.0, 19] 

También puede usar itertools.cycle para evitar el bucle externo:

 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 

No es el más limpio. Pero funciona.

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

Mantenga sus valores de paso en una lista. Solo itere una vez más y continúe agregándolos en rotación hasta que llegue a la tapa.