Python map和reduce函数用法示例

作者:junjie 时间:2022-06-21 09:02:25 

先看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,map,reduce,函数,用法
0
投稿

猜你喜欢

  • django数据模型on_delete, db_constraint的使用详解

    2023-02-16 04:48:06
  • 网页设计之文字的辨识度与可读性

    2007-10-26 16:19:00
  • Python自动扫描出微信不是好友名单的方法

    2023-03-14 09:25:44
  • python实现视频读取和转化图片

    2023-09-25 08:23:22
  • 删除PHP数组中的重复元素的实现代码

    2023-06-06 21:19:46
  • ASP.NET MVC从控制器中获取URL值

    2023-07-09 18:30:08
  • 图文详解如何利用PyTorch实现图像识别

    2023-02-04 00:54:13
  • 跟老齐学Python之变量和参数

    2023-01-12 22:23:31
  • python 基于Appium控制多设备并行执行

    2022-12-11 12:00:06
  • 教你如何使用Conda命令 + 安装tensorflow

    2021-09-17 22:32:07
  • Python用GET方法上传文件

    2022-08-03 01:13:59
  • 游戏中的交互设计

    2008-08-25 19:20:00
  • django 外键model的互相读取方法

    2021-06-16 20:54:51
  • python 异常捕获详解流程

    2022-06-12 15:31:04
  • Ajax编程之旅第一站:HTTP请求

    2008-08-07 12:55:00
  • MySQL数据库性能优化的八大“妙手”

    2009-07-30 08:58:00
  • pygame游戏之旅 载入小车图片、更新窗口

    2022-08-06 18:12:39
  • Oracle学习笔记(四)

    2012-01-05 18:57:33
  • asp中把数据表映射成ajax可调用的json格式的方法

    2010-01-22 15:27:00
  • 如何正确合理的建立MYSQL数据库索引

    2010-10-25 20:08:00
  • asp之家 网络编程 m.aspxhome.com