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 reduceFunktion, die eine Implementierung von Fold ist, genau wie oben, jedoch wurde mir gesagt, dass die "pythonische" Art der Programmierung darin bestand, lambdaBegriffe 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 reduceFunktion ist, oder reducedie 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.
sumist nicht gut genug