源本科技 | 码上会

Python 中的 map()

2026/01/17
9
0

学习目标

  • 理解 map() 函数的基本语法与工作原理

  • 掌握使用自定义函数、内置函数和 lambda 表达式配合 map() 的方法

  • 学会处理多个可迭代对象作为 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 表达式

使用匿名函数(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()ab 中并行取出元素 xy,传给 lambda 函数进行加法运算。

若多个可迭代对象长度不同,map() 会在最短的那个耗尽时停止。


实用场景

1. 字符串转大写

fruits = ['apple', 'banana', 'cherry']
res = map(str.upper, fruits)
print(list(res))

输出:

['APPLE', 'BANANA', 'CHERRY']

说明:
直接使用字符串方法 str.upper 作为函数传入 map()


2. 提取每个字符串的首字母

words = ['apple', 'banana', 'cherry']
res = map(lambda s: s[0], words)
print(list(res))

输出:

['a', 'b', 'c']

3. 去除字符串首尾空白

s = ['  hello  ', '  world ', ' python  ']
res = map(str.strip, s)
print(list(res))

输出:

['hello', 'world', 'python']

说明:
str.strip 是字符串的内置方法,可直接作为函数传递。


4. 摄氏度转华氏度

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() 等配合使用以获取具体结果。

  • 支持内置函数(如 intstr.upper)、自定义函数和 lambda 表达式。

  • 多个可迭代对象传入时,函数参数数量需匹配,且处理长度由最短的可迭代对象决定。


思考题

  1. 如果有两个长度不同的列表 [1, 2][3, 4, 5],使用 map(lambda x, y: x + y, ...) 会得到什么结果?为什么?

  2. 除了 map(),Python 中还有哪些函数式编程工具(如 filter()reduce())?它们与 map() 在用途上有何区别?

  3. 在什么情况下使用列表推导式(List Comprehension)比 map() 更合适?请举例说明。