Python中的reduce函数是经常和map,filter一起被提到的函数,但是reduce的工作原理却不是那么直观,我们这里就来详细讲解一下这个函数。

首先先来看一下reduce函数的用法

import functools

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

reduce接受的第一个参数是一个函数,第二个参数是一个列表。上面我们通过reduce函数来作了一个求和的运算,我们这里计算的是[1, 2, 3, 4]这个列表中所有元素的和。

需要注意的是,reduce的第一个参数是一个函数,这个函数接受两个参数,像上面的lambda函数有两个参数x和y,这两个参数分别代表什么意思呢?这也是很多人感到困惑的地方。这个得从reduce的工作原理说起。

reduce工作原理

对于我们上面的代码,reduce的工作原理是像下面这张图所示的

首先,reduce会计算列表中第一个和第二个元素的和,然后把这个结果和第三个元素相加,然后再把新的这个计算结果和第四个元素相加,每一次都是上一次计算的结果和下一个元素相加,所以这样就实现了求和运算。

每一次计算中,x和y分别被赋予了什么值,我们可以定义下面一个函数来看一下

def func(x, y):

print(x, y)

然后我们把这个函数传给reduce函数的第一个参数,像下面这样

functools.reduce(func, [1, 2, 3, 4])

执行上面的代码,会看到如下的输出

1 2

None 3

None 4

可以看到,在第一次计算中,x和y被赋予了列表中的第一个和第二个元素,像下面这样

然后我们计算func(x, y),把这个结果记作第一次计算的结果。因为我们的func没有return语句,所以这里的结果是None。

然后我们进入第二次计算。在第二次计算中,x被赋予了第一次计算的结果,也就是上面算得的None,y被赋予了第三个元素的值,像下面这张图所示

然后计算func(x, y),把这个结果记作第二次计算的结果。同样的,因为func没有返回值,所以计算的结果是None。

然后我们进入第三次计算。在第三次计算中,x被赋予了第二次计算的结果,也就是上面算得的None,y被赋予了第四个元素的值,像下面这张图所示

然后计算func(x, y),把这个结果记作第三次计算的结果。因为我们已经遍历完了列表中所有的元素,这个第三次计算的结果也是我们最终的结果,就是我们reduce函数的返回值。

上面就是reduce函数的工作原理。每一次计算过程,x和y被赋予的值是什么,通过上面的图,应该也非常清楚了。

reduce举例

那理解了reduce函数的原理之后,我们再来看看怎么样用reduce函数。使用reduce函数最大的好处就是可以使代码变得非常简洁。我们来举几个例子看一下。计算列表中所有元素的乘积

functools.reduce(lambda x, y: x*y, [1,2,3,4])

可以看到,用reduce函数,我们可以用一行代码搞定计算所有元素的积,而不用去写冗长的循环。

2. 计算列表中所有元素的最大值

functools.reduce(lambda x,y: x if x>y else y, [1,2,3,4])

3. 我们有一个列表,里面存了一个数的各位数字,比如[3, 5, 8, 1]对应的是3581的每一个数字,我们要从这个列表计算出原来的数,我们可以这样做

functools.reduce(lambda x,y: x * 10 + y, [3, 5, 8, 1])

好,以上是关于reduce用法的几个例子。

大家在使用reduce的时候,如果有一些好的例子,也欢迎在评论里补充。

python中reduce函数用法_一文读懂reduce函数相关推荐

  1. c++ 传入回调函数 参数没有传入_一文读懂回调函数

    1 什么是回调函数? 来自公众号:C语言与cpp编程 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回 ...

  2. python的序列包括什么_一文读懂什么是序列 (sequence)

    sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说,是对象的集合,但鉴于我们还没有引入"对象"概念,暂时说元素) 序列可以包含一个或多个元素,也可 ...

  3. python输入什么就输出什么_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  4. python读取枚举_一文读懂Python 枚举

    enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...

  5. 语言相关系数显著性_相关性分析在SPSS中的具体操作,一文读懂相关系数的含义及使用——【杏花开生物医药统计】...

    相关性分析介绍 生物和医学统计中,相关分析属于流程前端的探索性分析,研究变量间关系及性质,其结果在为下一步采取何种方法做出指引,为数据挖掘之前的基础工作. 相关系数的选择 相关分析之前,需要先确认变量 ...

  6. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  7. stata 求输出相关系数矩阵命令_一文读懂结果输出命令大全(上)

    目录 描述统计量 help tabstat   //Stata 官方命令 描述统计量组间均值差异检验 help ttest help ttable2 help estout 相关分析命令 help p ...

  8. psm倾向得分匹配法举例_一文读懂倾向得分匹配法(PSM)举例及stata实现(一)

    原标题:一文读懂倾向得分匹配法(PSM)举例及stata实现(一) 一.倾向匹配得分应用之培训对工资的效应 政策背景:国家支持工作示范项目( National Supported Work,NSW ) ...

  9. stata 将数据集变量名称导出_一文读懂空间计量经济学及stata操作

    在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量命令之spregress的使用. 一. ...

最新文章

  1. Cant find model en_core_web_sm
  2. laravel 导出导入excel和csv文件的 使用
  3. 1052 Linked List Sorting (25 分)【难度: 一般 / 知识点: 链表】
  4. exe的dll加载过程
  5. 人口预测和阻尼-增长模型_使用分类模型预测利率-第3部分
  6. 听说你的模型训练耗时太长?来昇腾开发者沙龙找解决方案
  7. Spring DI如何给对象赋空值 以及 对 “” null 空值的总结
  8. 使用主题来自动包装控件样式
  9. iPhone 4 Cydia使用教程 精选Cydia源 cydia怎么添加源 Cydia源使用方法 越狱后使用cydia
  10. 什么是虚短、虚断、虚地
  11. win10系统20H2版本更新以后桌面底下弹出了对话框,说我们在加载你的信息流时遇到了问题?
  12. 计算机做课程表教程,初学表格制作教程 初学者如何制作课程表
  13. 如何免费将excel表格转换成Word文档?
  14. lucene相关资料
  15. 什么是量子霸权?我们如何才能实现它?
  16. 定义一个抽象类一水果,创建若干水果对象存放在-一个水果类型的数组中,输出数组中所有水果的类型、重量
  17. 下列关于python函数参数说法错误的是_以下关于函数说法错误的是
  18. 当前时间与GMT时间转换
  19. python 0or2_Python表达式 0 and 1 or not 2True的值为(     )
  20. 怎么把照片做成视频?教你一键成片的制作方法

热门文章

  1. ResNet结构详解
  2. 智能颈部按摩仪——5.档位切换实现
  3. php线程教程,实例讲解php实现多线程
  4. 【Maven】org.codehaus.plexus.component.repository.exception.ComponentLookupException
  5. 2021.3.2版本idea配置maven出现org.codehaus.plexus.component.repository.exception.ComponentLookupException
  6. sql计算除法保留两位小数
  7. 【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge
  8. 论文整理Actively Mapping Industrial Structures with Information Gain-Based Planning on a Quadruped Robot
  9. 【艾琪出品】-【计算机】测试题系列四参考资料
  10. 2022-04-13 工作记录--LayUI-动态渲染数据表格的表头参数