considerare alcuni sequenza data e una lunghezza della finestra, dire il list
ciclico finestra scorrevole iterazione
a = [13 * i + 1 for i in range(24)]
(in modo che
In [61]: a
Out[61]:
[1,
14,
27,
40,
...,
287,
300]
)
e finestra lunghezza 3.
Mi piacerebbe prendere la somma della finestra scorrevole di questa sequenza, ma ciclicamente; vale a dire, per calcolare la lunghezza-24 list
:
[sum([1, 14, 27]),
sum([14, 27, 40]),
...,
sum([287, 300, 1]),
sum([300, 1, 14])]
il meglio che potevo venire con, utilizzando collections.deque
e Stupid Lambda Tricks, era
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))
c'è qualcosa di meno orribile?
Questo è migliore di quello che ho fatto sotto ogni aspetto. Vieni a pensare alla seconda metà della tua risposta (la classica coda add-head-sottrazione), questa potrebbe essere inserita anche nella comprensione delle liste usando lo Stupid-Lambda-Trick, no? –
@AmiTavory: sono usato di più per creare una tabella di somma perché spesso ho bisogno di accedere alla somma della finestra scorrevole casualmente e solo per un piccolo sottoinsieme dei valori. Ovviamente puoi anche tenere una somma parziale e aggiungerla/sottrarla. – 6502