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实现网站文件的全备份和差异备份
Nov 30 Python
python通过文件头判断文件类型
Oct 30 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
Python实现图片拼接的代码
Jul 02 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
利用Python检测URL状态
Jul 31 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python改变对象的字符串显示的方法
Aug 01 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实际应用经验篇(5)
2006/10/09 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
php给数组赋值的实例方法
2019/09/26 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
javascript 写类方式之九
2009/07/05 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
进一步了解Python中的XML 工具
2015/04/13 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python下载库的步骤方法
2019/10/12 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
团工委书记自荐书范文
2013/12/17 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
秋季运动会广播稿
2014/02/22 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
运动会加油稿20字
2014/11/15 职场文书
2015年服务员工作总结
2015/04/08 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL