Python map和reduce函数用法示例


Posted in Python onFebruary 26, 2015

先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例说明,比如我们有一个函数a(x)=x*2,要把这个函数作用在一个list [1, 2, 3, 4, 5]上,就可以用map()实现如下:

>>> def a(x):

...     return x * 2

... 

>>> map(a, [1,2,3,4,5]) 

[2, 4, 6, 8, 10]

map传入的第一个参数a,即a函数,当然你也可以不用map函数实现这功能:

>>> list = []

>>> for i in [1, 2, 3, 4, 5]:

...     list.append(a(i))

... 

>>> print list

[2, 4, 6, 8, 10]

从代码量上来讲,map要精简很多,所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的a(x)=x*2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:

>>> map(str,[1,2,3,4,5])

['1', '2', '3', '4', '5']

>>>

只需要一行代码,就搞定了。让我们再看和来自顾雪峰python教程的习题:利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam', ‘LISA', ‘barT'],输出:[‘Adam', ‘Lisa', ‘Bart']。作为我个人来说,我可能会先将不规范的英文名全转换在小写然后再通过capitalize()函数,将首字母转换在写,代码如下:

>>> def caps(name):

...     return name.capitalize()

... 

>>> def lowers(name):

...     return name.lower()

... 

>>> map(caps, map(lowers,['adam', 'LISA', 'barT']))

['Adam', 'Lisa', 'Bart']

再看reduce的用法。reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:

>>> def add(x, y):

...     return x + y

... 

>>> reduce(add, [1, 3, 5, 7, 9])

25

>>> reduce(add, range(1, 11))

55

>>> reduce(add, range(1, 11),20)

75

当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。但是如果要把序列[1,2,3,4,5,6,7]变换成整数1234567,reduce就可以派上用场:

>>> def fn(x, y):

...     return x * 10 + y

... 

>>> reduce(fn, [1,3,4,5,6,7])

134567
Python 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python线程之定位与销毁的实现
Feb 17 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
Python 控制终端输出文字的实例
Jul 12 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Python趣味入门教程之循环语句while
Aug 26 Python
python 动态绘制爱心的示例
Sep 27 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python字符串拼接+和join的区别详解
Dec 03 Python
Python中运行并行任务技巧
Feb 26 #Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 #Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 #Python
python持久性管理pickle模块详细介绍
Feb 18 #Python
Python中暂存上传图片的方法
Feb 18 #Python
Python中AND、OR的一个使用小技巧
Feb 18 #Python
Python编写屏幕截图程序方法
Feb 18 #Python
You might like
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
php自动加载代码实例详解
2021/02/26 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
简单谈谈json跨域
2016/03/13 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
python实现ipsec开权限实例
2014/11/11 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
方法名是否可以与构造器的名字相同
2012/06/04 面试题
机电一体化专业推荐信
2013/12/03 职场文书
小学信息技术教学反思
2014/02/10 职场文书
学生会离职感言
2014/02/11 职场文书
优秀广告词大全
2014/03/19 职场文书
师范毕业生求职信
2014/07/11 职场文书
贪污检举信范文
2015/03/02 职场文书
2015年双拥工作总结
2015/04/08 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js