objectif
Créer des couples consécutifs et des fenêtres de taille n efficacement.
code minimal
try:
from itertools import pairwise # Python 3.10+
except ImportError:
def pairwise(iterable):
it = iter(iterable)
prev = next(it, None)
for cur in it:
yield (prev, cur)
prev = cur
data = [1, 2, 3, 4]
print(list(pairwise(data)) == [(1,2),(2,3),(3,4)]) # attendu: True
utilisation
from collections import deque
def sliding_window(it, n):
it = iter(it)
d = deque(maxlen=n)
for _ in range(n-1):
d.append(next(it, None))
for x in it:
d.append(x)
yield tuple(d)
print(list(sliding_window([1,2,3,4], 3)) == [(1,2,3),(2,3,4)])
variante(s) utile(s)
from itertools import islice
def batched(it, n):
it = iter(it)
while True:
batch = tuple(islice(it, n))
if not batch: break
yield batch
print(list(batched(range(7), 3)) == [(0,1,2),(3,4,5),(6,)])
notes
- pairwise est idéal pour détecter des changements entre éléments consécutifs.
- Utilisez deque pour des fenêtres glissantes O(1) par étape.