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, reduce
katlamanın bir uygulaması olan işlevi tam olarak yukarıdaki gibi sağlar, ancak bana 'pitonik' programlama yolunun, lambda
mü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 reduce
bunu 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ı list
hafıza açısından sabit hale getirmek için bırakabilirsiniz .
sum
yeterince iyi değil mi?