Рассмотрим некоторую заданную последовательность и длину окна, скажем, list
a = [13 * i + 1 for i in range(24)]
(так что
In [61]: a
Out[61]:
[1,
14,
27,
40,
...,
287,
300]
)
и длина окна 3.
Я хотел бы взять скользящую оконную сумму этой последовательности, но циклически; то есть для вычисления длины -24 list
:
[sum([1, 14, 27]),
sum([14, 27, 40]),
...,
sum([287, 300, 1]),
sum([300, 1, 14])]
Лучшее, что я мог придумать, используя collections.deque
и глупые трюки лямбда, было
d = collections.deque(range(24))
d.rotate(1)
map(lambda _: d.rotate(-1) or sum(a[i] for i in list(d)[: 3]), range(24))
Есть ли что-то менее ужасное?