Reduce函数-Python成为专业人士笔记

来自《Python成为专业人士笔记

reduce介绍

reduce函数用于迭代所有的元素并将结果按照既定方式累计,看如下例子:

         #实现函数,计算列表所有元素的累计和
 from functools import reduce

 def add(s1, s2):
     return s1 + s2

 asequence = [1, 2, 3]

 print(reduce(add, asequence))  #功能,将每个元素代入add函数实现累计

 #输出 6  即: 1+2+3
      

当然,不使用自定义的add,直接使用operator模块的内置add也是可以的:

         #实现函数,计算列表所有元素的累计和
 from functools import reduce
 import operator

 asequence = [1, 2, 3]

 print(reduce(operator.add, asequence))

  #输出 6  即: 1+2+3 
      

你甚至还可以指定一个累计起始值:

         #实现函数,计算列表所有元素的累计和
 from functools import reduce
 import operator

 asequence = [1, 2, 3]

 print(from functools import reduce
 import operator
 asequence = [1, 2, 3]
 print(reduce(add, asequence, 10)))

  #输出 16  即: 10+1+2+3 
      

再来个乘法累计例子,现在要演示它的计算过程:

        from functools import reduce

def multiply(s1, s2):
 
    print('{arg1} * {arg2} = {res}'.format(arg1=s1,arg2=s2,res=s1*s2))
 
    return s1 * s2

asequence = [1, 2, 3]
cumprod = reduce(multiply, asequence, 5)

print(cumprod)

#输出:
5 * 1 = 5
5 * 2 = 10
10 * 3 = 30
30
记住,所谓累计即都是以之前的迭代作为后续迭代的基础值

      

当然,这里使用operator模块内置的算法能达到一样的效果:

        reduce(operator.mul, [10, 5, -3])
      

作为开关器

reduce不会在迭代完成之前终止迭代,因此它可以用于创建类似any()或all()这样的开关器:

        from functools import reduce

import operator
# "all"
reduce(operator.and_, [False, True, True, True]) # = False

# "any"
reduce(operator.or_, [True, False, False, False]) # = True
      

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值