在 Haskell 中,实现类似以下代码的最惯用方式是什么:
foldl (+) 0 [1,2,3,4,5]
--> 15
或者在Ruby中等价于:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
显然,Python提供了reduce
函数,就像上面的折叠实现一样,但是我被告知,“pythonic”编程的方式是避免使用lambda
表达式和高阶函数,而尽可能使用列表推导式。因此,在Python中折叠一个列表或类似结构的首选方法是什么?是否存在不使用reduce
函数的成语化方式实现这个操作?
sum()
在这方面提供了有限的功能。例如,sum([[a], [b, c, d], [e, f]], [])
返回[a, b, c, d, e, f]
。 - Joel Cornett+
操作在时间和内存上都是线性的,使整个调用成为二次方程。使用list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]))
总体上是线性的 - 如果您只需要对其进行一次迭代,则可以删除对list
的调用以使其在内存方面保持恒定。 - lvc