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写xml文件的操作实例
Oct 05 Python
Python实现简单状态框架的方法
Mar 19 Python
Python操作MySQL模拟银行转账
Mar 12 Python
在python中bool函数的取值方法
Nov 01 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python实现图片添加文字
Nov 26 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Python获取对象属性的几种方式小结
Mar 12 Python
详解Python高阶函数
Aug 15 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图片处理之图片背景、画布操作
2014/11/19 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
php无限极分类实现方法分析
2019/07/04 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
vue router demo详解
2017/10/13 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
常见python正则用法的简单实例
2016/06/21 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Django之PopUp的具体实现方法
2019/08/31 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
一套C++笔试题面试题
2012/06/06 面试题
医学生求职自荐信
2013/10/25 职场文书
九年级英语教学反思
2014/01/31 职场文书
尊师重教演讲稿
2014/09/04 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
群众路线调研报告范文
2014/11/03 职场文书
销售辞职信范文
2015/03/02 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
欠款证明
2015/06/24 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL