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 排列组合之itertools
Mar 20 Python
Python 异常处理实例详解
Mar 12 Python
Python对文件操作知识汇总
May 15 Python
python类的继承实例详解
Mar 30 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
Python Numpy计算各类距离的方法
Jul 05 Python
Django logging配置及使用详解
Jul 23 Python
python中执行smtplib失败的处理方法
Jul 01 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python 学习GCN图卷积神经网络
May 11 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基本函数汇总
2015/07/09 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
jQuery的三种$()
2009/12/30 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
详解node中创建服务进程
2017/05/09 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
英国计算机商店:Technextday
2019/12/28 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
双拥工作宣传标语
2014/06/26 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2014年维稳工作总结
2014/11/18 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python