首页 新闻 会员 周边 捐助

map(func, iterable, *iterables)

0
[已解决问题] 解决于 2025-09-02 16:07
  • func 要调用的函数(或任何可调用对象)。
  • iterable 可迭代对象(列表、元组、字符串、生成器……)。
  • 可以一次给多个可迭代对象func 必须接受对应个数的参数。
_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-09-02 16:04
< >
分享
最佳答案
0

map(function,) 这个function中的参数就是后面的iterator中元素,function参数个数决定几个iterator

  • map(function, iterable1, iterable2, ...)
  • function 的参数个数 = 后面 iterable 的个数
  • map 会把每个 iterable 里对应位置的元素打包成一组,依次喂给 function。

 表格

复制
写法等价于说明
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+1002+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 循环等“消耗”它才会真正计算。

_java_python | 小虾三级 |园豆:984 | 2025-09-02 16:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册