func
要调用的函数(或任何可调用对象)。iterable
可迭代对象(列表、元组、字符串、生成器……)。func
必须接受对应个数的参数。map(function,) 这个function中的参数就是后面的iterator中元素,function参数个数决定几个iterator
map(function, iterable1, iterable2, ...)
表格
写法 | 等价于 | 说明 |
---|---|---|
map(abs, [-3, 4]) |
abs(-3) 、abs(4) |
1 个迭代器 → function 1 个参数 |
map(pow, [2,3], [4,3]) |
pow(2,4) 、pow(3,3) |
2 个迭代器 → function 2 个参数 |
map(lambda x,y,z: x+y+z, [1,2], [10,20], [100,200]) |
1+10+100 、2+20+200 |
3 个迭代器 → lambda 3 个参数 |
一对一映射(最常见)
>>> list(map(int, ['1', '2', '3'])) [1, 2, 3] >>> list(map(str.upper, 'abcd')) ['A', 'B', 'C', 'D']
多对一映射(多个可迭代对象并行)
list(map(pow, [2, 3, 4], [5, 2, 1])) # 2**5, 3**2, 4**1 [32, 9, 4]
用 lambda 或自定义函数
>>> list(map(lambda x: x*2, [1, 2, 3, 4])) [2, 4, 6, 8] def add3(x): return x + 3 >>> list(map(add3, [10, 20])) [13, 23]
长度不一致:多个可迭代对象长度不同,以最短的为准
>>> list(map(lambda x, y: x + y, [1, 2], [10, 20, 30])) [11, 22]
简单操作用 map
简洁,复杂逻辑建议用列表推导式或生成
器表达式,可读性更高
[x*2 for x in [1, 2, 3, 4]] # 等价于 map(lambda x: x*2, [1, 2, 3, 4])
map
返回的是迭代器,用 list()
、tuple()
、for
循环等“消耗”它才会真正计算。