2015-10-16 89 views
2

根据this在SO中的线程,reduce相当于折叠。但是,在Haskell中,accum参数也被传递给fold。 python在reduce中通过累加器的方式是什么。蟒蛇减少积累作为参数

my_func(accum, list_elem): 
    if list_elem > 5: 
     return accum and True # or just accum 
    return accum and False # or just False 

reduce(my_func, my_list) 

在这里,我想通过True作为累加器。 Python中传递初始累加器值的方式是什么?

+2

['reduce'](https://docs.python.org/2/library/functions.html#reduce)接受累加器作为第三个参数 –

+0

谢谢。我希望我错过了它。这似乎是一个答案。 – doptimusprime

+0

我无法理解许多示例不使用第三个参数。 – doptimusprime

回答

3

根据documentationreduce接受可选的第三个参数作为累积初始值设定项。

你可以写:

def my_func(acc, elem): 
    return acc and elem > 5 

reduce(my_func, my_list, True) 

,或者使用Lambda:

reduce(lambda a,e: a and e > 5, my_list, True) 

另外,对于这个特殊的例子,要检查5比严格小于全部中的元素my_list,可以使用

greater_than_five = (5).__lt__ 
all(greater_than_five, my_list)