Python reduce()函数的用法小结


Posted in Python onNovember 15, 2017

reduce()函数也是Python内置的一个高阶函数。

reduce()

格式:

reduce (func, seq[, init()])

reduce()函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果(注:第一次为init元素,如果没有指定init则为seq的第一个元素)与下一个元素一同传入二元func函数中去执行。在reduce()函数中,init是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取seq中的第一个元素。
reduce()函数的执行过程如下图所示:

Python reduce()函数的用法小结

从reduce函数的执行过程,让我们很容易联想到求一个数的阶乘,而Python中并没有给出一个求阶乘的内置函数,正好我们就拿这个例子来说明reduce函数吧。

#未指定init的情况
>>> n = 6
>>> print reduce(lambda x, y: x * y, range(1, n))
120

上面的例子中range(1,6)函数生成的是一个[1, 2, 3, 4, 5]这样的列表,这里我们给它个名叫seq1吧,reduce()函数执行时,由于没有指定init参数,所以将取seq1中的第一个元素1,作为第一个元素,由于前面的lambda有2个变量,所以需要两个实参,于是就取seq1中的第2个元素2,与第一个元素1一起传入lambda中去执行,并将返回结果2,并同下一个元素3再一起传入lambda中执行,再次返回的结果,作为下一次执行的第一个元素,依次类推,就得出结果5! = 120。
如果我们希望得到阶乘的结果再多增加几倍,可以启用init这个可选项。如:

>>> print reduce(lambda x, y: x * y, range(1, n),2)
240

这个时候,就会将init作为第一个元素,和seq1中的第一个元素1一起传入lambda函数中去执行,返回结果再作为下一次的第一个元素。

下面给出的例子更简单一些,大家可以看下

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

例如,编写一个f函数,接收x和y,返回x和y的和:

def f(x, y):
 return x + y

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。

上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

reduce(f, [1, 3, 5, 7, 9], 100)

结果将变为125,因为第一轮计算是:

计算初始值和第一个元素:f(100, 1),结果为101。

Python 相关文章推荐
学习python的几条建议分享
Feb 10 Python
Python手机号码归属地查询代码
May 04 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Python if语句知识点用法总结
Jun 10 Python
python实现事件驱动
Nov 21 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
Django视图扩展类知识点详解
Oct 25 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
pycharm安装及如何导入numpy
Apr 03 Python
python简单实例训练(21~30)
Nov 15 #Python
python下10个简单实例代码
Nov 15 #Python
python获取多线程及子线程的返回值
Nov 15 #Python
python使用threading获取线程函数返回值的实现方法
Nov 15 #Python
python enumerate函数的使用方法总结
Nov 15 #Python
Python set常用操作函数集锦
Nov 15 #Python
python机器学习库常用汇总
Nov 15 #Python
You might like
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
将php数组输出html表格的方法
2014/02/24 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
详解php中反射的应用
2016/03/15 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
Python list和str互转的实现示例
2020/11/16 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
小学生自我评价范例
2013/09/24 职场文书
销售经理竞聘书
2014/03/31 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
手术室消毒隔离制度
2015/08/05 职场文书