Sie kennen die handliche reduce
Funktion in Python. Zum Beispiel könnten Sie es verwenden, um eine Liste zusammenzufassen, wie so (so tun, als es nicht die eingebaute in sum ist):Reduplist in Python: wie reduzieren, aber die Liste der Zwischenergebnisse geben
reduce(lambda x,y: x+y, [1,2,3,4], 0)
, die zurückgibt (((0 + 1) 2) 3) + 4 = 10.
Was nun, wenn ich eine Liste der Zwischensummen wollte? In diesem Fall [1,3,6,10]
.
Hier ist eine hässliche Lösung. Gibt es etwas Pythonsches?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
FYI, zumindest in Haskell wird dies als * Scan * bekannt. Reduce wird in der Welt der funktionalen Programmierung auch als (eine spezifische Art von) * falten * bezeichnet. – delnan
Danke delnan, yeah, ich kenne das als FoldList von Mathematica. Mathematica hat eine akkumulierende Version vieler dieser funktionalen Programmierfunktionen, die durch Anhängen von "List" bezeichnet sind. Ich sehe aus der Antwort unten, dass in Python 3, was ich Reduplist aufrufen, jetzt als accumulate() verfügbar ist. – dreeves