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爬虫数据处理(详解)
Jun 10 Python
python使用Flask操作mysql实现登录功能
May 14 Python
python组合无重复三位数的实例
Nov 13 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
详解Python正则表达式re模块
Mar 19 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python 如何设置守护进程
Oct 29 Python
Django集成富文本编辑器summernote的实现步骤
May 31 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
基于Python的OCR实现示例
2020/04/03 Python
详解如何修改python中字典的键和值
2020/09/29 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
2014年消防工作实施方案
2014/02/20 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
读书之星事迹材料
2014/05/12 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
千手观音观后感
2015/06/03 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python