5. Python map() 函数详解及使用示例
在 Python 中,map()
函数是一个用于对可迭代对象中的每个元素应用指定函数的内置函数,返回一个包含函数计算结果的新迭代器。它是 Python 中常见的函数式编程工具之一,能提高代码的简洁性和可读性。
map()
的语法
map(function, iterable)
function
:要应用的函数。iterable
:一个或多个可迭代对象(如列表、元组、字符串等)。基本用法
map()
会对 iterable
中的每个元素应用 function
,返回一个 map
对象(本质是一个迭代器),可以使用 list()
或 tuple()
将其转换为相应的数据结构。
示例 1:将列表元素平方
nums = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, nums)
print(list(squared)) # 输出: [1, 4, 9, 16, 25]
示例 2:将字符串列表中的每个元素转换为大写
words = ['hello', 'world', 'python']
uppercased = map(str.upper, words)
print(list(uppercased)) # 输出: ['HELLO', 'WORLD', 'PYTHON']
使用多个可迭代对象
map()
支持多个可迭代对象。多个可迭代对象将按对应索引位置逐个传递给函数,直到最短的可迭代对象结束。
示例 3:将两个列表的元素相加
list1 = [1, 2, 3]
list2 = [4, 5, 6]
summed = map(lambda x, y: x + y, list1, list2)
print(list(summed)) # 输出: [5, 7, 9]
常见应用场景
lambda
:编写简单的内联函数,提高代码简洁度。示例 4:将数字列表转换为字符串
nums = [1, 2, 3, 4]
str_nums = map(str, nums)
print(list(str_nums)) # 输出: ['1', '2', '3', '4']
使用 map()
与列表推导式的对比
在许多情况下,列表推导式是 map()
的替代方案,并且在简单的映射场景中更具可读性。
示例 5:列表推导式等价于 map()
nums = [1, 2, 3, 4]
squared = [x ** 2 for x in nums] # 列表推导式
print(squared) # 输出: [1, 4, 9, 16]
注意事项
- 懒惰求值:
map()
返回的是一个迭代器对象,只有在遍历或转换为列表/元组时才会计算。 - 性能:对于简单操作,
map()
和列表推导式性能相似,但对于更复杂的逻辑,列表推导式通常更易读。 - 函数传递:
map()
可以传递任何函数,包括用户定义的函数和内置函数。
示例 6:使用用户定义的函数
def double(x):
return x * 2
nums = [1, 2, 3, 4]
doubled = map(double, nums)
print(list(doubled)) # 输出: [2, 4, 6, 8]
map()
是 Python 强大的函数式工具之一,适用于需要将某个函数应用到序列中每个元素的情景。
作者:拾工