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 os模块介绍
Nov 30 Python
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
Python中实现三目运算的方法
Jun 21 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
Django Rest framework频率原理与限制
Jul 26 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
python pyhs2 的安装操作
Apr 07 Python
Python一些基本的图像操作和处理总结
Jun 23 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错误日志 display_errors与log_errors的区别
2012/10/09 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
使用PHP开发留言板功能
2019/11/19 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
Python修改列表值问题解决方案
2020/03/06 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
优秀生推荐信范文
2013/11/28 职场文书
《春晓》教学反思
2014/04/20 职场文书
研究生求职自荐书
2014/06/23 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
代码解析React中setState同步和异步问题
2021/06/03 Javascript
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫