What is the most idiomatic way to achieve something like the following, in Haskell:
foldl (+) 0 [1,2,3,4,5]
--> 15
Or its equivalent in Ruby:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Obviously, Python provides the reduce function, which is an implementation of fold, exactly as above, however, I was told that the 'pythonic' way of programming was to avoid lambda terms and higher-order functions, preferring list-comprehensions where possible. Therefore, is there a preferred way of folding a list, or list-like structure in Python that isn't the reduce function, or is reduce the idiomatic way of achieving this?
sumisn't good enough? - JBernardosum, you may want to provide some different types of examples. - jamylaksum()actually provides limited functionality with this.sum([[a], [b, c, d], [e, f]], [])returns[a, b, c, d, e, f]for example. - Joel Cornett+on lists is a linear time operation in both time and memory, making the whole call quadratic. Usinglist(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])is linear overall - and if you only need to iterate over it once, you can drop the call tolistto make it constant in terms of memory. - lvc