Python的reduce疑问

reduce解释:reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,
代码:

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

疑问:要求是两个参数,参数x和参数y是什么, reduce(add, [1]),这种情况我都搞不明白这个reduce是怎么工作的

阅读 2.2k
2 个回答

reduce大致相当于:

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个参数,对序列l而言有reduce(add,l),看这句话"结果继续和序列的下一个元素做累积计算",第一个结果是add(l[0],l[1]),l的下一个元素是l[2],因而下一步就是add(add(l[0],l[1]),l[2]),这么看应该理解了吧,x,y就是序列的元素。
而reduce(add,[1]),看代码,当取出第一元素后,value=1,it已经空了,因此最后return的value值为1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题