如何在 Python 中使用 map() 函数
了解如何使用 Python 的 map() 函数。掌握将函数应用于迭代而不编写循环,并将映射与列表推导式进行比较。
概述
处理数据集合时,您通常需要对可迭代中的每个项目应用特定的转换。例如,将字符串数字列表转换为整数,或者通过将字符串转换为小写来规范数据库字符串数组。 Python 提供了一个名为“map()”的内置工具,而不是编写冗长的“for”循环。
`map(function, iterable)` 函数接受一个转换函数和一个可迭代作为参数。它将函数应用于可迭代的每个元素并返回一个迭代器对象(一个“map”对象)。因为它作为迭代器返回,所以计算是延迟执行的:仅在迭代元素时才处理元素,这为大型数据集节省了内存。
要立即获取地图对象的列表表示形式,您必须使用“list()”构造函数转换结果:“list(map(func, data))”。您可以将任何标准函数、标准库函数(如“str”或“len”)或使用“lambda”关键字声明的自定义匿名函数直接传递给“map()”以进行内联执行。
代码和执行输出
此脚本演示了使用带有字符串转换的 map() 函数修改集合、将列表项映射到数字以及使用 lambda 回调。
map_function.py
在编辑器中尝试# 1. Map string conversion over a list of numbers
numbers = [1, 2, 3, 4]
string_numbers = list(map(str, numbers))
print("Mapped to strings:", string_numbers)
# 2. Square numbers using a lambda function inside map()
squared = list(map(lambda x: x**2, numbers))
print("Squared numbers:", squared)
# 3. Apply custom logic function to items
def normalize_name(name):
return name.strip().capitalize()
names = [" alice", "BOB ", " charlie "]
clean_names = list(map(normalize_name, names))
print("Clean names list:", clean_names)端子输出
Mapped to strings: ['1', '2', '3', '4']
Squared numbers: [1, 4, 9, 16]
Clean names list: ['Alice', 'Bob', 'Charlie']逐步实施
- 确定要应用于集合中每个元素的转换函数。
- 调用 map(function_name, iterable) 创建转换元素的惰性迭代器。
- 如果您需要立即将所有元素作为标准列表访问,请将 map() 调用包装在 list() 内。
- 将 map() 与 lambda 函数结合起来,可实现快速、一次性的内联转换。
常见问题解答
map() 比列表推导式更好吗?
社区通常认为列表推导式更具可读性和Python风格。但是,在应用现有内置函数(如 map(str, list))时,map() 可能会更快,因为它运行优化的 C 代码循环。
map() 可以接受多个可迭代对象吗?
是的!如果转换函数采用多个参数,则可以将多个迭代传递给map()。例如,map(lambda x, y: x + y, list1, list2) 将成对添加元素。
相关主题
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。