Was ist der idiomatischste Weg, um in Haskell so etwas wie das Folgende zu erreichen:
foldl (+) 0 [1,2,3,4,5]
--> 15
Oder das Äquivalent in Ruby:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Offensichtlich bietet Python die reduce
Funktion, die eine Implementierung von Fold ist, genau wie oben, jedoch wurde mir gesagt, dass die "pythonische" Art der Programmierung darin bestand, lambda
Begriffe und Funktionen höherer Ordnung zu vermeiden und Listenverständnisse nach Möglichkeit zu bevorzugen. Gibt es daher eine bevorzugte Methode zum Falten einer Liste oder einer listenähnlichen Struktur in Python, die nicht die reduce
Funktion ist, oder reduce
die idiomatische Methode, um dies zu erreichen?
sum
, wenn Sie verschiedene Arten von Beispielen angeben möchten.
sum()
bietet damit tatsächlich eingeschränkte Funktionalität. sum([[a], [b, c, d], [e, f]], [])
gibt [a, b, c, d, e, f]
zum Beispiel zurück.
+
auf Listen ist eine lineare Zeitoperation sowohl in der Zeit als auch im Speicher, wodurch der gesamte Aufruf quadratisch wird. Die Verwendung list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])
ist insgesamt linear - und wenn Sie sie nur einmal durchlaufen müssen, können Sie den Anruf abbrechen list
, um ihn in Bezug auf den Speicher konstant zu halten.
sum
ist nicht gut genug