ZetCode

Python map 函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨了 Python 的 map 函数,该函数将一个函数应用于可迭代对象中的每个项目。我们将介绍基本用法、lambda 函数、多个可迭代对象和实际示例。

基本定义

map 函数将给定的函数应用于可迭代对象的每个项目,并返回一个 map 对象(一个迭代器)。它是 Python 中函数式编程的基本工具。

主要特点:惰性求值(返回迭代器),适用于任何可调用对象,支持多个可迭代对象。 map 对象可以转换为其他序列,如列表或元组。

基本数值转换

这是一个简单的数值用法示例,展示了 map 如何通过应用一个函数来转换列表中的每个元素。

basic_map.py
def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]
squared = map(square, numbers)

print(list(squared))  # [1, 4, 9, 16, 25]

此示例展示了 mapsquare 函数应用于列表中的每个数字。结果是一个迭代器,我们将其转换为列表以进行显示。

请注意,原始的 numbers 列表保持不变。 map 创建了一个新的迭代器,其中包含转换后的值。

使用 Lambda 函数

map 通常与 lambda 函数一起使用,以进行简洁的一次性转换。此示例演示了这种常见模式。

lambda_map.py
numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)

print(list(doubled))  # [2, 4, 6, 8, 10]

在这里,我们使用 lambda 函数将每个数字加倍。 lambda 语法紧凑,避免为简单的操作定义单独的命名函数。

当转换逻辑简单且不会在代码中的其他地方重复使用时,此方法特别有用。

多个可迭代对象

map 可以并行处理多个可迭代对象。该函数在每个步骤中接收来自每个可迭代对象的一个项目。

multi_map.py
def add(a, b):
    return a + b

nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
result = map(add, nums1, nums2)

print(list(result))  # [5, 7, 9]

此示例添加来自两个列表的相应元素。 add 函数按顺序接收对 (1,4)、(2,5) 和 (3,6)。

当最短的输入可迭代对象耗尽时,生成的迭代器停止。此行为与其他 Python 函数(如 zip)一致。

类型转换

map 通常用于序列元素的类型转换。此示例将字符串转换为整数。

type_map.py
str_numbers = ["1", "2", "3", "4"]
int_numbers = map(int, str_numbers)

print(list(int_numbers))  # [1, 2, 3, 4]

在这里,我们使用 Python 的内置 int 函数将每个字符串转换为整数。这是一种转换序列类型的简洁方法。

类似的模式适用于其他类型构造函数,如 floatstrbool,以满足不同的转换需求。

处理文本数据

此示例展示了 map 如何通过将字符串方法应用于序列中的每个元素来处理文本数据。

text_map.py
names = ["alice", "bob", "charlie"]
capitalized = map(str.capitalize, names)

print(list(capitalized))  # ["Alice", "Bob", "Charlie"]

我们使用 str.capitalize 方法来正确地大写每个名称。该方法在迭代期间绑定到每个字符串元素。

此模式适用于任何字符串方法,使 map 可用于批量文本处理操作。

最佳实践

资料来源

作者

我的名字是 Jan Bodnar,我是一位热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程