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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
python的常用模块之collections模块详解
Dec 06 Python
Python递归函数实例讲解
Feb 27 Python
Python数据类型之String字符串实例详解
May 08 Python
Python Collatz序列实现过程解析
Oct 12 Python
wxPython实现绘图小例子
Nov 19 Python
Python SSL证书验证问题解决方案
Jan 13 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
Tensorflow分批量读取数据教程
Feb 07 Python
Python实现寻找回文数字过程解析
Jun 09 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
python缺失值的解决方法总结
Jun 09 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入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
Python创建日历实例
2014/08/21 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
python编写计算器功能
2019/10/25 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
财务人员个人自荐信范文
2013/09/26 职场文书
团组织关系介绍信
2014/01/12 职场文书
表彰大会主持词
2014/03/26 职场文书
厨房管理计划书
2014/04/27 职场文书
管理提升方案
2014/06/04 职场文书
2014年教务工作总结
2014/12/03 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技