鍍金池/ 問答/Python/ Python的reduce疑問

Python的reduce疑問

reduce解釋:reduce把一個函數(shù)作用在一個序列[x1, x2, x3, ...]上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算,
代碼:

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 2,3])#結(jié)果為6
>>> reduce(add, [1])#結(jié)果為1

疑問:要求是兩個參數(shù),參數(shù)x和參數(shù)y是什么, reduce(add, [1]),這種情況我都搞不明白這個reduce是怎么工作的

回答
編輯回答
舊城人

reduce大致相當(dāng)于:

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

單就你這個add來說,可以這么理解,

reduce(add,[1,2,3]) = add(add(1,2),3)

add必須接受2個參數(shù),對序列l(wèi)而言有reduce(add,l),看這句話"結(jié)果繼續(xù)和序列的下一個元素做累積計算",第一個結(jié)果是add(l[0],l[1]),l的下一個元素是l[2],因而下一步就是add(add(l[0],l[1]),l[2]),這么看應(yīng)該理解了吧,x,y就是序列的元素。
而reduce(add,[1]),看代碼,當(dāng)取出第一元素后,value=1,it已經(jīng)空了,因此最后return的value值為1

2018年3月18日 07:19
編輯回答
妖妖

我在《Think Python》上看到了關(guān)于這個的解釋,已整理成文章,你可以參考下:
http://yarving.historytale.co...

2017年8月7日 08:42