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脚本来删除指定容量以上的文件的教程
May 04 Python
详解Python中的strftime()方法的使用
May 22 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
基于python实现模拟数据结构模型
Jun 12 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 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(1)
2006/10/09 PHP
PHP安全配置详细说明
2011/09/26 PHP
php防止sql注入的方法详解
2017/02/20 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
激活 ActiveX 控件
2006/10/09 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
express启用https使用小记
2019/05/21 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
浅谈python中set使用
2016/06/30 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
对python调用RPC接口的实例详解
2019/01/03 Python
深入了解Django View(视图系统)
2019/07/23 Python
python读取ini配置文件过程示范
2019/12/23 Python
Keras自定义IOU方式
2020/06/10 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
硕士研究生个人求职信
2013/12/04 职场文书
护理实习自我鉴定
2013/12/14 职场文书
两只小狮子教学反思
2014/02/05 职场文书
在校实习生求职信
2014/06/18 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏