python内置函数——reduce()函数

reduce()函数接收三个参数:函数、序列、初始值。reduce()函数的执行方式是:将一个接收两个参数的函数从左到右累积作用于序列的元素,直到序列中只剩一个元素。初始值默认为None,如果存在则将其放在序列中元素计算之前,并且在序列为空值作为默认值。举例:

from functools import reduce

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

首先计算1 + 2得到结果3,将结果和下一个元素作为参数传给函数,即计算3 + 3,依次类推直到最后。

计算列表[1, 2, 3, 4]中各元素的平方和:

a = [1, 2, 3, 4]
b = reduce(lambda x, y: x * x + y * y, a)
print(b)  # 1172

得到错误结果是因为对reduce()函数的执行顺序不了解,上面的代码相当于计算1^2+2^2=5,再计算5^2+3^2=34,然后是34^2+4^2=1172。要实现要求可以使用如下代码:

c = reduce(lambda x, y: x + y, [i * i for i in a])
print(c)  # 30

即先对每个元素进行平方操作在累积求和。

初始值的使用:

d = reduce(lambda x, y: x + y, a, 5)
print(d)  # 15,初始值加入到计算中,如果设为str类型会报错:TypeError: must be str, not int
d = reduce(lambda x, y: x + y, [], 'abc')
print(d)  # 序列为空,返回初始值:'abc'

filter()函数类似,reduce()函数也可以操作其他数据类型:

res = reduce(lambda x, y: x + ' ' + y, ['Hello', 'tomorrow'])
print(res)  # Hello tomorrow

下面是在菜鸟教程里reduce()函数下有人分享的一篇笔记,统计字符串里面某字符出现的次数,首先需要将字符串放在列表中:

sentences = [
    'The Deep Learning textbook is a resource intended to help students and practitioners enter the field of machine learning in general and deep learning in particular. ']

word_count = reduce(lambda a, x: a + x.count('learning'), sentences, 0)
print(word_count)  # 2

在这个例子中,a为初始值0,x为整个句子。如果不设置初始值,则a表示整个句子,x为空,得到的结果是整个句子。(个人理解)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值