Iterar sobre n elementos sucesivos de la lista (con superposición)

lositertools El módulo Python implementa algunos bloques de construcción básicos para iteradores. Como dicen, "forman un álgebra iterador". Estaba esperando, pero no pude encontrar una manera sucinta de hacer la siguiente iteración usando el módulo. Dada una lista de números reales ordenados, por ejemplo

a = [1.0,1.5,2.0,2.5,3.0]

... devuelve una nueva lista (o simplemente itera) agrupando por algunan valor, digamos2

b = [(1.0,1.5),(1.5,2.0),(2.0,2.5),(2.5,3.0)]

La forma en que encontré esto fue la siguiente. Primero divida la lista en dos, con índices pares e impares:

even, odds = a[::2], a[1::2]

Luego construya la nueva lista:

b = [(even, odd) for even, odd in zip(evens, odds)]
b = sorted(b + [(odd, even) for even, odd in zip(evens[1:], odds)])

En esencia, es similar a una media móvil.

¿Hay una manera sucinta de hacer esto (con o sin itertools)?

PD.:

Solicitud

Imagina ela lista como el conjunto de marcas de tiempo de algunos eventos ocurridos durante un experimento:

timestamp       event
47.8            1a
60.5            1b
67.4            2a
74.5            2b
78.5            1a
82.2            1b
89.5            2a
95.3            2b
101.7           1a
110.2           1b
121.9           2a
127.1           2b

...

Este código se está utilizando para segmentar esos eventos de acuerdo con diferentes ventanas temporales. En este momento estoy interesado en los datos entre2 sucesivos eventos; 'n> 2' se usaría solo con fines exploratorios.

Respuestas a la pregunta(4)

Su respuesta a la pregunta