python学习笔记-tip27(高阶函数-reduce函数)

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上
这个函数必须接收两个参数
参数1:函数
参数2:序列:list tuple dict set等
reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

  fun(x,y):这是一个作用在两个参数的函数,符合reduce用法
  reduce(fun,[a,b,c,d])
  =fun(fun(fun(a,b),c),d)

需要注意的是
先执行内部的fun,然后再依次展开,知道最后出现了两个参数~

但是细想一下,一般的操作还真用不到这个reduce

下面还是用廖雪峰老师的例子来说吧

  • 求一个整数list的 所有元素的和

  • 将一个整数list 变成顺序一样的一个整数

我们首先看看第一个列子

    #定义一个list
    nums=[1,2,3,4,5,6]
    #定义一个求和函数,这个函数必须是两个参数的
    def  getSum(x,y):
          return x+y
    #我们来尝试一下reduce函数
    result=reduce(getSum,nums)

接下来看看输出结果

    print(result)

执行过程分析

  reduce(getSum,[1,2,3,4,5,6])
                    ⬇️
  getSum(getSum(getSum(getSum(getSum(1,2),3),4),5),6)

答案很清晰

  #即为1到6的和,但是思路很重要
  21

我们来看一下实际的示例图

注意

在使用reduce时,必须导入依赖:from functools import reduce,而map则不需要

现在我们来看下第二个示例:

先理解题意:

我们现在要把[1,2,3,4,5]变成12345,即按照个十百千万的方式完成证书的拼装

首先定义list

    nums=[1,2,3,4,5]

然后定义方法,注意参数必须是两位的

     def  fun(x,y):
        return x*10+y

然后调用即可

    print(reduce(fun,nums))

那么处理逻辑:

  reduce(fun,[1,2,3,4,5])
            ⬇️
 fun(fun(fun(fun(1,2),3),4),5)

即: 先拼接1,2
然后得到的结果 再和3 进行拼接
再得到的结果和4拼接
然后和5拼接

对,reduce思路即为此

看下实际演示:


你可能感兴趣的:(python学习笔记-tip27(高阶函数-reduce函数))