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中sets模块的用法实例
Sep 30 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
Django框架用户注销功能实现方法分析
May 28 Python
Python hexstring-list-str之间的转换方法
Jun 12 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
keras打印loss对权重的导数方式
Jun 10 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/06/16 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python 进程的几种创建方式详解
2019/08/29 Python
Django之form组件自动校验数据实现
2020/01/14 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
经典C++面试题一
2016/11/06 面试题
应届生英语教师求职信
2013/11/05 职场文书
求职毕业生自荐书
2014/02/08 职场文书
学校宣传标语
2014/06/18 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
个人总结怎么写
2015/02/26 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
介绍一下28个JS常用数组方法
2022/05/06 Javascript