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 相关文章推荐
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
django2 快速安装指南分享
Jan 05 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
Python内置的数据类型及使用方法
Apr 13 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php采集速度探究总结(原创)
2008/04/18 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
jQuery使用技巧简单汇总
2013/04/18 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python组合无重复三位数的实例
2018/11/13 Python
python检测IP地址变化并触发事件
2018/12/26 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
一位农村小子的自荐信
2014/04/07 职场文书
三万活动总结
2014/04/28 职场文书
幽灵公主观后感
2015/06/09 职场文书
安全生产会议制度
2015/08/06 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android