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的类实例属性访问规则探讨
Jan 30 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
对python中return和print的一些理解
Aug 18 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
基于python实现把json数据转换成Excel表格
May 07 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 程序员的调试技术小结
2009/11/15 PHP
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
php学习之function的用法
2012/07/14 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
理解AngularJs指令
2015/12/10 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python分类测试代码实例汇总
2020/07/23 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
PHP笔试题
2012/02/22 面试题
司法局2014法制宣传日活动总结
2014/11/01 职场文书
爱情保证书
2015/01/17 职场文书
法学专业求职信范文
2015/03/19 职场文书