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 26 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
python机器学习实战之K均值聚类
Dec 20 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
python os.fork() 循环输出方法
Aug 08 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
linux下python中文乱码解决方案详解
Aug 28 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Python中如何引入第三方模块
May 27 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 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
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
网络教育自我鉴定
2013/11/01 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
演讲稿格式
2014/04/30 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
地方白酒代理协议书
2014/10/25 职场文书
单位实习鉴定评语
2015/01/04 职场文书
廉政承诺书
2015/01/19 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
海弦WR-800F
2022/04/05 无线电