Über n aufeinanderfolgende Elemente der Liste iterieren (mit Überlappung)

Das itertoolsas @ python-Modul implementiert einige grundlegende Bausteine für Iteratoren. Wie sie sagen, "sie bilden eine Iteratoralgebra". Ich hatte damit gerechnet, aber ich konnte keinen prägnanten Weg finden, um die folgende Iteration mit dem Modul durchzuführen. Gegeben eine Liste von geordneten reellen Zahlen, zum Beispiel

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

... gibt eine neue Liste (oder nur eine Wiederholung) zurück, die nach @ gruppiert isn Wert, sag2

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

Die Art und Weise, wie ich das fand, war wie folgt. Teilen Sie zuerst die Liste in zwei Teile auf, mit Abschlüssen und Quotenindizes:

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

Dann konstruiere die neue Liste:

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

Im Wesentlichen ist es einem bewegten Mittelwert ähnlich.

Gibt es eine prägnante Möglichkeit, dies zu tun (mit oder ohne itertools)?

PS.:

Anwendun

Stellen Sie sich das @ va Liste als Satz von Zeitstempeln einiger Ereignisse, die während eines Experiments aufgetreten sind:

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

...

Dieser Code wird verwendet, um diese Ereignisse in Übereinstimmung mit verschiedenen Zeitfenstern zu segmentieren. Momentan interessieren mich die Daten zwischen2 aufeinanderfolgende Ereignisse; 'n> 2' wird nur zu Erkundungszwecken verwendet.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage