Python学习笔记之reduce()

reduce() 函数接收两个参数,第一个参数是函数(称之为 f ),这个函数 f 必须接收两个参数,第二个参数是只能是一个 list。reduce() 函数的使用过程如下:

  1. 首先取出 list 的前两个元素,传入 f 并计算结果(A);
  2. 然后将结果(A)作为第一个参数,list 中的第三个元素作为第二个参数继续传入 f 计算结果(B);
  3. 再将结果(B)作为第一个参数, list 中的第四个元素作为第二个参数继续传入 f 计算结果(C);
  4. 如此反复直到 list 所有元素都计算完。

简而言而,reduce 把结果继续和序列的下一个元素做累积计算。效果如下:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
同时还需要注意,调用 reduce() 函数需要从Python库中导入,导入代码如下:

from functools import reduce

下面举几个例子来体现 reduce() 函数的强大:

  1. 将一个序列 [1, 3, 5, 7, 9] 变换成整数 13579
# 将一个序列 [1, 3, 5, 7, 9] 变换成整数 13579
from functools import reduce
def fn(x, y):
    return x * 10 + y

reduce(fn, [1, 3, 5, 7, 9])
# 返回结果
# 13579
  1. 写一个函数,实现将一个字符串转化为整数
# 写一个把字符串转化为整数的函数
from functools import reduce

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def str2num(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(ch):
        return DIGITS[ch]
    return reduce(fn, map(char2num, s))
# 需要用到 map() 函数的原因:
# map 的第二个参数是一个Iterable,而 reduce 函数第二个参数只能是一个 list,所以必须通过
# map() 函数将 str 转换成 list
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值