考慮一些給定的序列和一個窗口長度,說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
和Stupid Lambda Tricks最好的,是
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))
有沒有少東西可怕?
這比我在各方面都做得更好。想想你的答案的後半部分(經典的加減法 - 尾巴),這可以放在列表理解中,也可以使用Stupid-Lambda-Trick,不是嗎? –
@AmiTavory:我更多地用於構建一個和表,因爲我經常需要隨機訪問滑動窗口總和,並且只對這些值的一小部分進行訪問。當然你也可以保留一個運行總和並加上/減去它。 – 6502