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之永远强大的函数
Sep 14 Python
python爬虫使用cookie登录详解
Dec 27 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
python开发入门——列表生成式
Sep 03 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
关于 Python json中load和loads区别
Nov 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购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
javascript正则表达式总结
2016/02/29 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
Javascript的this详解
2019/03/23 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python类和函数中使用静态变量的方法
2015/05/09 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
详解Python编程中基本的数学计算使用
2016/02/04 Python
django中模板的html自动转意方法
2018/05/27 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
安全伴我行演讲稿
2014/09/04 职场文书
骨干教师申报材料
2014/12/17 职场文书
父亲节活动总结
2015/02/12 职场文书
学校百日安全活动总结
2015/05/07 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS