你知道Python中的方便的reduce
函數。例如,你可以用它來總結一個列表,像這樣(假裝沒有內置sum):Python中的reducelist:像減少但給出中間結果列表
reduce(lambda x,y: x+y, [1,2,3,4], 0)
返回(((0 + 1)+ 2)+3)+ 4 = 10.
現在如果我想要一箇中間和的列表呢?在這種情況下,[1,3,6,10]
。
這是一個醜陋的解決方案。有更多pythonic嗎?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
僅供參考,至少在Haskell中,這被稱爲* scan *。在函數式編程領域,Reduce也被稱爲(特定種類)* fold *。 – delnan
感謝delnan,是的,我知道這是來自Mathematica的FoldList。 Mathematica具有許多這些函數式編程函數的累積版本,通過追加「List」來表示。我從下面的答案中看到,在Python 3中,我稱之爲reducelist現在可用作accumulate()。 – dreeves