2017-12-18 245 views
1

我想在python中使用reduce函數編寫一個累積和的版本。這是我到目前爲止的代碼:蟒蛇cumsum與減少功能

from functools import reduce 

def my_cum_sum(arg): 
    return reduce(lambda a, x: (a.append(a[-1] + x)) if len(a) > 0 else a.append(x), arg, []) 

assert(my_cum_sum([1, 1, 1, 1]) == [1, 2, 3, 4])) 

但問題是,在我的lambda函數,蟒蛇不知道,(我的蓄能器參數)是一個列表對象,我想我的降低函數返回一個列表。在其他函數式編程語言中,它可能會要求我指定類型ax。但我是python的新手,並沒有完全弄清楚它是如何處理類型和內容的。什麼是解決這個問題的pythonic方式?

回答

1

append返回None,所以你不能像這樣將列表返回到reduce。 只需使用清單,並提出了單個元素的列表,或者只是取得了初步元素的列表之間的加成,如果列表爲空:

from functools import reduce 

def my_cum_sum(arg): 
    return reduce(lambda a, x: a + [a[-1]+x] if a else [x], arg, []) 

print (my_cum_sum([1, 1, 1, 1])) 

結果:

[1, 2, 3, 4] 

(注意:if len(a)>0最好寫成if a