Haskell'de aşağıdakine benzer bir şeyi başarmanın en deyimsel yolu nedir:
foldl (+) 0 [1,2,3,4,5]
--> 15
Veya Ruby'deki karşılığı:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Açıkçası, Python, reducekatlamanın bir uygulaması olan işlevi tam olarak yukarıdaki gibi sağlar, ancak bana 'pitonik' programlama yolunun, lambdamümkün olan yerlerde liste kavrayışlarını tercih ederek terimlerden ve üst düzey işlevlerden kaçınmak olduğu söylendi . Bu nedenle, Python'da bir listeyi bölmenin tercih edilen bir yolu veya liste benzeri yapı var mıdır reduce, bu işlev değil mi , yoksa reducebunu başarmanın deyimsel yolu mu?
sum, bazı farklı türlerde örnekler vermek isteyebilirsiniz.
sum()aslında bununla sınırlı işlevsellik sağlar. örneğin sum([[a], [b, c, d], [e, f]], [])döner [a, b, c, d, e, f].
+listelerde, hem zamanda hem de bellekte doğrusal bir zaman işlemidir ve tüm aramayı ikinci dereceden yapar. Kullanımı list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])genel olarak doğrusaldır - ve üzerinde yalnızca bir kez yinelemeniz gerekiyorsa, çağrıyı listhafıza açısından sabit hale getirmek için bırakabilirsiniz .
sumyeterince iyi değil mi?