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求导数的方法
May 09 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
python3图片文件批量重命名处理
Oct 31 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
python如何实现图片压缩
Sep 11 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
python APScheduler执行定时任务介绍
Apr 19 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
JS简单实现动画弹出层效果
2015/05/05 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
微信小程序实现滑动删除效果
2017/05/19 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
就业导师推荐信范文
2015/03/27 职场文书
python实现图片批量压缩
2021/04/24 Python
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
DE1103使用报告
2022/04/05 无线电
Python OpenCV形态学运算示例详解
2022/04/07 Python