Python reduce

python中的reduce(),也是很好理解的。(注意,python 3.x中,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里)我们,可以这样形象的去理解它:

reduce(func, [1, 2, 3]) == func(func(1, 2), 3)
其中func是二元函数,处理后,返回一个值。
我们可以试着用纯Python来实现reduce(),它可能是这样:
def reduce (bin_func, seq, init = None):
    lseq = list(seq)
    if init is None:
        res = lseq.pop(0)
    else:
        res = init
    for item in lseq:
        res = bin_func(res, item)
    return res
解释一下的话就是这样:
如果初始化器是空的话,就从seq中取出两个数,传进func函数中,返回一个值x,然后取出seq中余下的元素的第一个,与x一起传进func,func返回y,然后y与seq中余下的元素的第一个一起传进func,然后返回一个值。。。如此这样循环,直到seq的最后一个元素,得到结果。像这样:
from functools import reduce
print(reduce((lambda x, y : x + y), range(5)))
其实计算的就是0 + 1 + 2 + 3 + 4的值,结果是
10
如果初始化器不为空的话,在seq中取出第一个元素,与初始化器一起传进func,然后取第二个数,传进,如此,直到最后一个元素,得到结果。像这样:
from functools import reduce
print(reduce((lambda x, y : x + y), range(5), 10))
计算的就是 10 + 0 + 1 + 2 + 3 + 4的值,结果是
20

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值