一、基本语法结构
1. 列表推导式(List Comprehension)
python
编辑
[expression for item in iterable if condition]
作用:快速创建列表。
示例:
python
编辑
squares = [x**2 for x in range(10)]evens = [x for x in range(20) if x % 2 == 0]
2. 集合推导式(Set Comprehension)
python
编辑
{expression for item in iterable if condition}作用:创建去重的无序集合。
示例:
python
编辑
unique_lengths = {len(word) for word in words}
3. 字典推导式(Dict Comprehension)
python
编辑
{key_expr: value_expr for item in iterable if condition}作用:快速构建字典。
示例:
python
编辑
square_map = {x: x**2 for x in range(5)}# {'a': 1, 'b': 2} → 反转键值对inv_dict = {v: k for k, v in original_dict.items()}
4. 生成器表达式(Generator Expression)
python
编辑
(expression for item in iterable if condition)
作用:惰性求值,节省内存。
注意:使用圆括号
(),但不是元组推导式(Python 没有元组推导式)。示例:
python
编辑
gen = (x**2 for x in range(10))sum_of_squares = sum(gen) # 仅在需要时计算
二、推导式的通用规则
核心结构:
[表达式 + for 循环 + 可选 if 条件]支持嵌套循环:
python
编辑
[(x, y) for x in range(3) for y in range(2)]# 等价于嵌套 for 循环
条件可出现在末尾(过滤)或表达式中(三元操作):
python
编辑
# 过滤[x for x in data if x > 0]# 表达式中使用条件[x if x > 0 else 0 for x in data]
避免副作用:推导式应保持纯函数风格,不要在其中修改外部变量。
可读性优先:过于复杂的推导式应改用普通循环。
三、常用场景
表格
| 场景 | 示例 |
|---|---|
| 数据转换 | [str(x) for x in numbers] |
| 数据过滤 | [name for name in names if name.startswith('A')] |
| 去重处理 | {x.lower() for x in words} |
| 构建映射 | {k: v*2 for k, v in config.items()} |
| 惰性计算(大文件/大数据) | (line.strip() for line in open('file.txt')) |
| 矩阵/嵌套结构扁平化 | [num for row in matrix for num in row] |
| 反转字典 | {v: k for k, v in d.items()}(要求值唯一) |
四、注意事项
性能:推导式通常比等效的
for循环更快(C 层优化)。内存 vs 惰性:列表/集合/字典推导式立即生成全部结果;生成器表达式按需计算,适合大数据。
不可滥用:多层嵌套或复杂逻辑会降低可读性,此时应使用传统循环。
作用域:在 Python 3 中,推导式有自己的局部作用域(不会污染外部变量)。
五、小结
Python 的推导式是一种声明式编程风格,能以简洁、高效的方式完成常见容器构建任务。掌握其语法规则和适用场景,有助于写出更 Pythonic 的代码。
✅ 建议:简单逻辑用推导式,复杂逻辑用函数或循环。

0条评论
点击登录参与评论