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 相关文章推荐
Python实现简单字典树的方法
Apr 29 Python
Python正则表达式知识汇总
Sep 22 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
python二进制文件的转译详解
Jul 03 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
python实现udp聊天窗口
Mar 31 Python
Python %r和%s区别代码实例解析
Apr 03 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
Python3 用什么IDE开发工具比较好
Nov 28 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
PHP实现可自定义样式的分页类
2016/03/29 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
jQuery 工具函数学习资料
2010/04/29 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
子页向父页传值示例
2013/11/27 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Python实现代码块儿折叠
2020/04/15 Python
Django如何使用redis作为缓存
2020/05/21 Python
python和php学习哪个更有发展
2020/06/17 Python
如何在python中实现线性回归
2020/08/10 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
《假如》教学反思
2014/04/17 职场文书
授权委托书
2014/09/17 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python