map是一个高阶用法,字面意义是映射,它的作用就是把一个数据结构映射成另外一种数据结构。

map用法比较绕,最好是对基础数据结构很熟悉了再使用,比如列表,字典,序列化这些。

map的基本语法如下:

map(function_object, iterable1, iterable2, ...)

map函数需要一个函数对象和任意数量的iterables,如list,dictionary等。它为序列中的每个元素执行function_object,并返回由函数对象修改的元素组成的列表。
示例如下:

def add2(x):
return x+2 map(add2, [1,2,3,4]) # Output: [3,4,5,6]

在上面的例子中,map对list中的每个元素1,2,3,4执行add2函数并返回[3,4,5,6]
接着看看如何用map和lambda重写上面的代码:

map(lambda x: x+2, [1,2,3,4])  #Output: [3,4,5,6]

仅仅一行即可搞定!

使用map和lambda迭代dictionary:

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

map(lambda x : x['name'], dict_a) # Output: ['python', 'java']

map(lambda x : x['points']*10,  dict_a) # Output: [100, 80]

map(lambda x : x['name'] == "python", dict_a) # Output: [True, False]

以上代码中,dict_a中的每个dict作为参数传递给lambda函数。lambda函数表达式作用于每个dict的结果作为输出。

map函数作用于多个iterables

list_a = [1, 2, 3]
list_b = [10, 20, 30] map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]

这里,list_a和list_b的第i个元素作为参数传递给lambda函数。

在Python3中,map函数返回一个惰性计算(lazily evaluated)的迭代器(iterator)或map对象。就像zip函数是惰性计算那样。
我们不能通过index访问map对象的元素,也不能使用len()得到它的长度。
但我们可以强制转换map对象为list:

map_output = map(lambda x: x*2, [1, 2, 3, 4])
print(map_output) # Output: map object: list_map_output = list(map_output) print(list_map_output) # Output: [2, 4, 6, 8]
文章首发于我的技术博客猿人学的Python基础教程

最新文章

  1. [LeetCode] Nested List Weight Sum II 嵌套链表权重和之二
  2. jQuery插件 -- 动态事件绑定插件jquery.livequery.js
  3. nullcon HackIM 2016 -- Crypto Question 5
  4. pullRefresh组件配置
  5. 聊聊CSS postproccessors
  6. HDU 3966:Aragorn's Story(树链剖分)
  7. sqlserver批量插入数据问题
  8. block 解析 - 形参变量
  9. 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
  10. Linux Centos下编译安装Redis
  11. com.netflix.zuul.exception.ZuulException: Hystrix Readed time out
  12. vue-cli3.X 打包后上传服务器刷新报 404的问题
  13. Ubuntu 16.04 下octave的使用入门
  14. ubuntu 安装json
  15. 论文阅读之: Hierarchical Object Detection with Deep Reinforcement Learning
  16. 如何从Windows中删除Node.js
  17. Enum 枚举值 (一) 获取描述信息
  18. 10 jmeter之动态关联
  19. 团队项目之开题scrum meeting
  20. 在Visual Studio项目中根据系统平台自动引用32或64位的DLL

热门文章

  1. Spring-Kafka —— 实现批量消费和手动提交offset
  2. coreDNS域名无法解析问题
  3. Centos7.2 MQTT的学习之Mosquitto搭建&集群搭建&使用
  4. discriminator 鉴别器
  5. 双系统删除Linux系统
  6. win系统常用命令
  7. USACO 1.1 Your Ride Is Here
  8. 【机器学习】【计算机视觉】非常全面的图像数据集《Actions》
  9. 【VS开发】list控件的InsertColumn方法出错
  10. maven运行工程