2015-10-16 131 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)