扩展 - map() 函数功能介绍
1 课程概览
本课扩展讲解 Python 内置 map() 函数的用法。map() 将指定函数作用到可迭代对象的每个元素上,返回一个惰性迭代器。本课为句子长度分布分析做铺垫,后续将使用 map(lambda x: len(x), sentences) 计算句子长度。
2 核心概念与定义
- map() 函数:Python 内置函数,将指定函数作用到可迭代对象的每个元素上,返回 map 对象(迭代器)。
- 惰性求值(Lazy Evaluation):map 对象是惰性的,创建时不会立即遍历,只有在实际迭代(如转列表、遍历打印)时才逐个获取元素,节省内存。
- 迭代器(Iterator):map 返回的对象是迭代器,一旦迭代完毕,再次迭代不会得到数据。
3 模型与算法详解
map() 函数语法
map(function, iterable, ...)
- function:函数对象(如
len、lambda x: x+2) - iterable:可迭代对象(如列表、元组、字符串)
- 返回值:map 对象(迭代器)
map() 工作流程
- 接收一个函数和一个可迭代对象
- 将函数作用到可迭代对象的每个元素
- 返回 map 对象(惰性迭代器)
- 需通过
list()转换或遍历获取结果
map() 特性
| 特性 | 说明 |
|---|---|
| 返回类型 | map 对象(迭代器) |
| 惰性求值 | 创建时不立即遍历 |
| 节省内存 | 逐个获取元素 |
| 一次性 | 迭代完毕后再次迭代无数据 |
map() vs for 循环
| 对比项 | map() | for 循环 |
|---|---|---|
| 代码简洁度 | 高(一行) | 低(多行) |
| 返回值 | 迭代器 | 无(需手动收集) |
| 性能 | 较高(C 语言实现) | 较低 |
| 可读性 | 函数式风格 | 命令式风格 |
4 数学原理与推导
map() 映射关系
给定函数 $f$ 和可迭代对象 $[x_1, x_2, ..., x_n]$:
$$\text{map}(f, [x_1, x_2, ..., x_n]) = [f(x_1), f(x_2), ..., f(x_n)]$$
示例
$$\text{map}(x \rightarrow x+2, [1, 2, 3, 4, 5]) = [3, 4, 5, 6, 7]$$
5 代码示例
# 需求一:演示 map 函数的用法
# 1. 定义一个函数,接收一个参数,返回其加2的结果
def function(x):
return x + 2
# 2. 定义函数,将 function 作用到列表中的每个元素上
def dm01_map():
# 将 function 作用到 [1, 2, 3, 4, 5] 上
result = map(function, [1, 2, 3, 4, 5])
print("map 对象:", result) # <map object>
print("类型:", type(result)) # <class 'map'>
# 转换为列表获取结果
result_list = list(result)
print("结果:", result_list) # [3, 4, 5, 6, 7]
# 测试
if __name__ == "__main__":
dm01_map()
使用 lambda 表达式
# 使用 lambda 简化
result = list(map(lambda x: x + 2, [1, 2, 3, 4, 5]))
print(result) # [3, 4, 5, 6, 7]
惰性求值示例
result = map(lambda x: x + 2, [1, 2, 3])
# 第一次迭代(转列表)
print(list(result)) # [3, 4, 5]
# 第二次迭代(已耗尽)
print(list(result)) # [](空,因为迭代器已耗尽)
6 重难点与易错提醒
- ❗重点:
map(function, iterable)将函数作用到每个元素,返回迭代器。 - ⚠️易错:map 返回的是迭代器,不是列表,需用
list()转换才能查看结果。 - ⚠️易错:迭代器是一次性的,迭代完毕后再次迭代无数据。
- 💡深入理解:map 是惰性求值,节省内存,适合处理大数据。
- 💡深入理解:map 常与 lambda 表达式配合使用,如
map(lambda x: len(x), sentences)。
7 课堂问答精选
Q1:map() 函数的作用是什么?
A:将指定函数作用到可迭代对象的每个元素上,返回一个 map 对象(迭代器)。例如 map(len, ["a", "bb", "ccc"]) 返回 [1, 2, 3]。
Q2:map() 返回的对象有什么特性?
A:①是迭代器(map object);②惰性求值,创建时不立即遍历;③节省内存;④一次性,迭代完毕后再次迭代无数据。
Q3:如何获取 map() 的结果?
A:使用 list(result) 转换为列表,或使用 for 循环遍历。
Q4:map() 和 for 循环有什么区别?
A:map() 代码更简洁(一行),返回迭代器,性能较高(C 语言实现);for 循环需手动收集结果,代码较长。
8 本课小结
map(function, iterable)将函数作用到每个元素,返回迭代器。- 特性:惰性求值、节省内存、一次性迭代。
- 需用
list()转换查看结果。 - 常与 lambda 配合:
map(lambda x: len(x), sentences)。 - 为后续句子长度分布分析做铺垫。
9 延伸思考
- map() 相比列表推导式有什么优劣?
- 如何处理多个可迭代对象的 map?