一、概述

map操作是函数式编程中的重要技术之一,其作用就是对一个集合中的每个元素做处理,生成一个新的元素,由这些新的元素组成一个新的集合的返回。

所以map操作后,产生的新集合的元素个数和原集合的元素个数相同,但里面的元素值不一样,元素值对应的类型也可以和原来的不一样。

python通过内置的map函数也很好的支持了map操作。

map函数的语法格式为:map(functioniterable...)

二、案例

1、对集合iterable中的每一个元素应用‘function’方法,返回一个新的元素,如:

>>> def double(a):
... return a*2
...
>>> map(double,range(5))
[0, 2, 4, 6, 8]

上面代码先定义了一个double函数,传递给map,range(5)返回一个列表[0,1,2,3,4],经map处理后,返回一个新的列表。

>>> arr = ['Mary ', 'had', 'a', 'little ', 'lamb']
>>> def strlen(a):
... return len(a)
...
>>> map(strlen,arr)
[5, 3, 1, 7, 4]

上面代码定义了一个strlen方法,用于计算字符串的长度。传给map后,返回一个列表,可以看出列表中的元素类型和原列表不一样。但两个列表的长度是一样的。

2、如果给出了多个集合参数,则要求function也必须带多个参数,如:

>>> def fun(a,b):
... return a*100+b
...
>>> map(fun,[1,2],[3,4])
[103, 204]

可以看出,是会平行的取每个集合中的元素来处理。
注意,如果某个集合的元素个数少于其它的集合的元素个数,则不足的会被扩充为None,但是否会出问题取决于fun中的运算方式。

3、如果function为None,对于单个集合返回一个同样的,但对于多个集合,返回一个集合(集合中每个元素为元组)。如:

>>> arr = [1,2,3]
>>> newarr = map(None,arr)
>>> print arr
[1, 2, 3]
>>> print newarr
[1, 2, 3]
>>> del newarr[:]
>>> print newarr
[]
>>> print arr
[1, 2, 3]

从上面代码可以看出,即使是返回同样的集合,map操作返回的是一个新的集合。

>>> map(None,[1,2,3],['a','b'])
[(1, 'a'), (2, 'b'), (3, None)]

从上面代码可以看出,返回的集合中元素是元组,长度不足的集合的元素以None替代。

三、lambda 表达式在map函数中的使用

在python中, lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

如:

>>> map(lambda x:pow(x,2),[1,2,3])
[1, 4, 9]

上面的lambda x : pow(x,2)  定义了一个函数,相当于

def fun(x):
return pow(x,2)

上面的map操作就等同  map(fun,[1,2,3] )

但使用lambda的好处是,省去了函数定义,这个场景还是很常见的,有很多时候,只需要能完成某个处理的函数,但具体名字无所谓,这时lambda就有用场了。这还避免了命名空间的污染,因为多个名字,就多了一分冲突的的可能。

再看一个有多个集合参数的例子

>>> map(lambda x,y:x+y,[1,2,3],[4,5,6])
[5, 7, 9]

四、总结

使用Map函数,可以让我们编写代码时把精力集中中如何转换元素上,不用关心集合的边界,不用关心新集合的创建等。这正是函数式编程的优势和典型特点所在。

下面通过例子来说明

最新文章

  1. 11大Java开源中文分词器的使用方法和分词效果对比
  2. 一道关于Promise应用的面试题
  3. hdu4497 GCD and LCM ——素数分解+计数
  4. android 利用View自身的setAnimation来实现动画
  5. OpenGL的glOrtho平行投影函数详解[转]
  6. virtualBox虚拟机安装与主机互访和实现上网配置
  7. 【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name
  8. AIX Study之--AIX网卡配置管理(ent0、en0、et0)
  9. PDF417码制尺寸定义
  10. checkbox属性checked="checked"但状态不是勾选状态的解决办法
  11. openssl命令行将pfx格式转.key和.crt文件,Apache适用
  12. 【C语言基础】循环体系
  13. Atitit 大json文件的结构化查看解决方案,高性能的jsonview  attilax总结.docx
  14. python 数据如何保存到excel中--xlwt
  15. github或码云协同开发
  16. Centos6下编译LEDE/OpenWrt
  17. 1111 Online Map (30 分)
  18. RecordingOptions录制设置选项
  19. Eureka Server Replicate
  20. mysql监控优化(三)慢查询

热门文章

  1. 模拟美萍加密狗--Rockey2虚拟狗(四)
  2. Java多线程之synchronized(五)
  3. js实现input输入框只能输入数字的功能
  4. HTML5 总结-Web存储-7
  5. C语言回溯算法解决N皇后问题
  6. Appium+Python app自动化测试之脚本启动和停止Appium服务
  7. selenium 怎么处理display:none
  8. Mono for Android 显示远程图片
  9. Qt 技巧:去除对话框边框 + 设置窗口可移动和透明
  10. Windows Phone 8初学者开发—第8部分:理解编译和部署