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 相关文章推荐
详解Django中Request对象的相关用法
Jul 17 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Python按钮的响应事件详解
Mar 04 Python
Python hmac模块使用实例解析
Dec 24 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python 动态绘制爱心的示例
Sep 27 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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获取mysql字段名称和其它信息的例子
2014/04/14 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
innerText 使用示例
2014/01/23 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
Python tornado上传文件的功能
2020/03/26 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
Linux如何为某个操作添加别名
2013/03/01 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
司仪主持词两篇
2014/03/22 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
作文批改评语
2014/12/25 职场文书
运动员入场前导词
2015/07/20 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
python如何在word中存储本地图片
2021/04/07 Python