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动态加载变量示例分享
Feb 17 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
python计算对角线有理函数插值的方法
May 07 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
Python零基础入门学习之输入与输出
Apr 03 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python实现TCP通信的示例代码
Sep 09 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
selenium+headless chrome爬虫的实现示例
Jan 08 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
js导出格式化的excel 实例方法
2013/07/17 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
学习vue.js计算属性
2016/12/03 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python编写一个优美的下载器
2018/04/15 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python aiohttp的使用详解
2019/06/20 Python
Python reversed函数及使用方法解析
2020/03/17 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
营运督导岗位职责
2015/04/10 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
Elasticsearch 批量操作
2022/04/19 Python