Listenverständnis mit einem Akkumulator

8

Was ist der beste Weg, um diese einfache Funktion mit einem Listenverständnis (oder einem anderen kompakten Ansatz) zu replizieren?

%Vor%     
Pierz 26.11.2013, 16:24
quelle

3 Antworten

6

In Python 3 verwenden Sie itertools.accumulate() :

%Vor%

Accumulate liefert das laufende Ergebnis der Addition der Werte der Eingabe, beginnend mit dem ersten Wert:

%Vor%

Sie können eine andere Operation als zweites Argument übergeben; Dies sollte eine aufrufbare Funktion sein, die das akkumulierte Ergebnis und den nächsten Wert annimmt und das neue akkumulierte Ergebnis zurückgibt. Das Modul operator ist sehr hilfreich bei der Bereitstellung von mathematischen Standardoperatoren für diese Art von Arbeit. Sie könnten damit beispielsweise ein laufendes Multiplikationsergebnis erzeugen:

%Vor%

Die Funktionalität ist einfach genug, um auf ältere Versionen (Python 2 oder Python 3.0 oder 3.1) zurück zu portieren:

%Vor%     
Martijn Pieters 26.11.2013, 16:31
quelle
4

Da Sie numpy bereits verwenden, können Sie cumsum :

verwenden %Vor%     
DSM 26.11.2013 16:35
quelle
1

Ok, du hast gesagt, du willst nicht numpy , aber hier ist meine Lösung sowieso. Es scheint mir, dass Sie einfach die kumulative Summe nehmen, verwenden Sie also die cumsum() Funktion.

%Vor%

Für ein zufälliges Beispiel

%Vor%     
Hannes Ovrén 26.11.2013 16:36
quelle

Tags und Links