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 xlwt设置excel单元格字体及格式
Apr 18 Python
python 对象和json互相转换方法
Mar 22 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
Python中return函数返回值实例用法
Nov 19 Python
解决pytorch 模型复制的一些问题
Mar 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
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
vue cli 全面解析
2018/02/28 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python 调用DLL操作抄表机
2009/01/12 Python
python使用百度翻译进行中翻英示例
2014/04/14 Python
python实现堆栈与队列的方法
2015/01/15 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python使用剪切板的方法
2017/06/06 Python
python用户管理系统的实例讲解
2017/12/23 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Django工程的分层结构详解
2019/07/18 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
小学中秋节活动方案
2014/02/06 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
纠纷协议书
2014/04/16 职场文书
擅自离岗检讨书
2014/09/12 职场文书
劳模先进事迹材料
2014/12/24 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
Python开发五子棋小游戏
2022/04/28 Python