python中的map函数

Python 中的 map 函数笔记

一、函数签名

map(function, iterable, ...)

map() 会将指定的函数依次作用于一个或多个可迭代对象的对应元素,并返回一个迭代器(map 对象)。

  • function:用于处理每个元素的函数。
  • iterable:一个或多个可迭代对象(如列表、元组、字符串等)。

二、基本用法

nums = [1, 2, 3, 4]
result = map(lambda x: x * 2, nums)
print(list(result))  # 输出: [2, 4, 6, 8]

返回值是一个 map 对象,需使用 list()tuple() 等转换为具体类型才能看到结果。

data = "5,10,15"
map_obj = map(int, data.split(','))  # 创建map对象

# 尝试直接使用
print(map_obj)  # 输出: <map object at 0x7f8d5c2b8d60>
print(map_obj[0])  # 报错: TypeError: 'map' object is not subscriptable

# 转换为列表后
list_obj = list(map_obj)
print(list_obj)  # 输出: [5, 10, 15]
print(list_obj[0])  # 输出: 5

# 尝试第二次使用map对象
print(sum(map_obj))  # 输出: 0 → 迭代器已耗尽!

三、多个可迭代对象

map 支持传入多个可迭代对象,函数的参数个数需与之对应:

a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))  # 输出: [5, 7, 9]

如果某个可迭代对象比其他的短,map 会以最短的为准。

四、常见用途示例

1. 类型转换

str_list = ['1', '2', '3']
int_list = list(map(int, str_list))  # [1, 2, 3]

2. 字符串处理

words = ['python', 'map', 'function']
upper_words = list(map(str.upper, words))  # ['PYTHON', 'MAP', 'FUNCTION']

3. 多输入处理

list1 = [1, 2, 3]
list2 = [10, 20, 30]
sums = list(map(lambda x, y: x + y, list1, list2))  # [11, 22, 33]

五、与列表推导式对比

特性 map() 列表推导式
可读性 一般(尤其是嵌套函数时) 通常更好
灵活性 仅支持函数调用 支持任意表达式
惰性计算 是(返回迭代器) 否(直接生成完整列表)
多个可迭代对象 支持 不直接支持(需配合 zip 使用)

一般建议:

  • 对纯函数映射的简单场景,可使用 map
  • 对于更复杂的处理逻辑,建议使用列表推导式,结构更清晰。

六、注意事项

  • 返回值是迭代器,只能消费一次。
  • 使用函数时需确保与可迭代对象的参数个数匹配。
  • 使用内置函数(如 int, str.upper 等)时可直接传入,不需使用 lambda。````
posted @ 2025-07-21 22:03  爆爆啥龙马  阅读(266)  评论(0)    收藏  举报