理解 map() 函数的基本语法与工作原理
掌握使用自定义函数、内置函数和 lambda 表达式配合 map() 的方法
学会处理多个可迭代对象作为 map() 的输入
能够将常见的数据转换任务用 map() 简洁实现
在 Python 中,map() 是一个高阶函数,用于对可迭代对象(如列表、元组、集合等)中的每个元素应用指定的函数,并返回一个 map 对象(即迭代器)。该函数能以简洁高效的方式完成对数据的统一转换。
基本语法
map(function, iterable, ...)function:要应用于每个元素的函数。
iterable:一个或多个可迭代对象。若提供多个,则 function 必须能接收对应数量的参数。
注意:
map()返回的是一个迭代器(map object),通常需用list()等函数将其转换为具体的数据结构以便查看或进一步处理。
将字符串列表转换为整数列表:
s = ['1', '2', '3', '4']
res = map(int, s)
print(list(res))输出:
[1, 2, 3, 4]说明:int 函数被依次作用于列表 s 中的每个字符串元素,完成类型转换。
定义一个函数对列表中每个元素进行操作:
def double(val):
return val * 2
a = [1, 2, 3, 4]
res = list(map(double, a))
print(res)输出:
[2, 4, 6, 8]说明:map(double, a) 将 double 函数应用于 a 的每个元素,再通过 list() 转换为列表。
使用匿名函数(lambda)使代码更紧凑:
a = [1, 2, 3, 4]
res = list(map(lambda x: x ** 2, a))
print(res)输出:
[1, 4, 9, 16]说明:lambda x: x ** 2 对每个元素求平方,避免了单独定义函数的开销。
当函数需要多个参数时,可传入多个可迭代对象:
a = [1, 2, 3]
b = [4, 5, 6]
res = map(lambda x, y: x + y, a, b)
print(list(res))输出:
[5, 7, 9]说明:map() 从 a 和 b 中并行取出元素 x 和 y,传给 lambda 函数进行加法运算。
若多个可迭代对象长度不同,
map()会在最短的那个耗尽时停止。
fruits = ['apple', 'banana', 'cherry']
res = map(str.upper, fruits)
print(list(res))输出:
['APPLE', 'BANANA', 'CHERRY']说明:
直接使用字符串方法 str.upper 作为函数传入 map()。
words = ['apple', 'banana', 'cherry']
res = map(lambda s: s[0], words)
print(list(res))输出:
['a', 'b', 'c']s = [' hello ', ' world ', ' python ']
res = map(str.strip, s)
print(list(res))输出:
['hello', 'world', 'python']说明:str.strip 是字符串的内置方法,可直接作为函数传递。
celsius = [0, 20, 37, 100]
fahrenheit = map(lambda c: (c * 9 / 5) + 32, celsius)
print(list(fahrenheit))输出:
[32.0, 68.0, 98.6, 212.0]说明:
利用标准温度转换公式,对整个温度列表进行批量转换。
map() 是一种函数式编程工具,适用于对可迭代对象进行逐元素变换。
它接受一个函数和一个或多个可迭代对象,返回一个惰性求值的迭代器。
常与 list()、tuple() 等配合使用以获取具体结果。
支持内置函数(如 int、str.upper)、自定义函数和 lambda 表达式。
多个可迭代对象传入时,函数参数数量需匹配,且处理长度由最短的可迭代对象决定。
如果有两个长度不同的列表 [1, 2] 和 [3, 4, 5],使用 map(lambda x, y: x + y, ...) 会得到什么结果?为什么?
除了 map(),Python 中还有哪些函数式编程工具(如 filter()、reduce())?它们与 map() 在用途上有何区别?
在什么情况下使用列表推导式(List Comprehension)比 map() 更合适?请举例说明。