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中cPickle用法例子分享
Jan 03 Python
Python用threading实现多线程详解
Feb 03 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
使用Django搭建网站实现商品分页功能
May 22 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
python基础之类属性和实例属性
Oct 24 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 XML操作类DOMDocument
2009/12/16 PHP
PHP 强制下载文件代码
2010/10/24 PHP
php 判断数组是几维数组
2013/03/20 PHP
微信API接口大全
2015/04/15 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
Atom的python插件和常用插件说明
2018/07/08 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python: 传递列表副本方式
2019/12/19 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
Python通过format函数格式化显示值
2020/10/17 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
高考励志标语
2014/06/05 职场文书
文案策划专业自荐信
2014/07/07 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
运动会观后感
2015/06/09 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏