reduce就是对序列中的元素进行累计操作
reduce详解 - 图1

  1. >>> reduce(lambda x,y: x+y , [1,2,3,4,5])
  2. 15

map对比一下,原来map是上下运算,reduce是横着逐个元素进行运算。
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

  1. >>> a [3, 9, 8, 5, 2]
  2. >>> b [1, 4, 9, 2, 6]
  3. >>> zip(a,b) # zip
  4. [(3, 1), (9, 4), (8, 9), (5, 2), (2, 6)]
  5. >>> sum(x*y for x,y in zip(a,b)) # 解析后直接求和
  6. 133 # 3+36+72+10+12

更酷的方法:

  1. >>> reduce(lambda sum,(x,y): sum+x*y,zip(a,b),0) # 综合使用了lambda和zip
  2. 133

例1

reduce可以把序列[1, 3, 5, 7, 9]变换成整数13579:

  1. >>> from functools import reduce
  2. >>> def fn(x, y):
  3. return x * 10 + y
  4. >>> reduce(fn, [1, 3, 5, 7, 9]) 13579

例2

编写一个prod()函数,可以接受一个list并利用reduce()求积:

  1. def prod(list): # 声明自定义函数prod()
  2. def multi(x, y): # 设计自定义函数multi
  3. return x*y # 返回乘积
  4. return reduce(multi, list)
  5. list = [1,2,3,4,5] print(prod(list))

简便写法:

  1. # 匿名函数
  2. def prod(list):
  3. return reduce(lambda x ,y : x*y , list)
  4. list = [1,2,3,4,5]
  5. print(prod(list))