Python 语法精炼4
列表推导式
基本语法
1 | [表达式 for 变量 in 可迭代对象 if 条件] |
等价于:
1 | result = [] |
- 可以省略
if(表示不过滤); - 表达式部分可以是任意计算或函数调用;
- 推导式返回的是一个新的列表对象。
常见用法
-
过滤元素
1
2[x for x in nums if x % 2 == 0]
→ [2, 4] -
嵌套循环
1
2[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
→ [(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)] -
二维展开
1
2[x for row in matrix for x in row]
→ [1,2,3,4,5,6]
技巧与陷阱
| 项目 | 要点 |
|---|---|
| 执行顺序 | 从左到右写,左外右内执行 |
| 可读性 | 不建议嵌套超过两层,否则不如显式 for |
| 性能 | 较普通循环更快(底层优化),但不是“懒加载” |
推导式 = 简洁高效的 for + if 语法糖,Pythonic 的核心语法之一。
特点:
- 有顺序;
- 可重复;
- 结果是列表;
- 最常用。
集合推导式
语法:
1 | {表达式 for 变量 in 可迭代对象 if 条件} |
示例:
1 | {x for x in [1, 2, 2, 3, 3]} |
特点:
- 无序;
- 自动去重;
- 结果是集合。
字典推导式
语法:
1 | {键表达式: 值表达式 for 元素 in 可迭代对象 if 条件} |
示例:
1 | {x: x**2 for x in range(5)} |
特点:
- 键唯一;
- 可用于字典反转、过滤、转换。
生成器表达式
语法:
1 | (表达式 for 变量 in 可迭代对象 if 条件) |
示例:
1 | (x**2 for x in range(5)) |
特点:
- 惰性求值:不立即生成所有元素;
- 节省内存;
- 通常与
for或next()一起使用; - 返回一个生成器对象。
记忆表格
| 类型 | 括号符号 | 是否惰性 | 是否去重 | 是否映射键值 |
|---|---|---|---|---|
| 列表 | [] |
否 | 否 | 否 |
| 集合 | {} |
否 | 是 | 否 |
| 字典 | {k:v} |
否 | 键唯一 | 是 |
| 生成器 | () |
✅ 是 | 否 | 否 |
常见误区
- 嵌套太多(>2 层)会严重影响可读性;
- 集合和字典无序;
- 推导式执行顺序是 左外右内;
- 生成器表达式返回的是可迭代对象,不是列表。
💡 总结:
推导式让代码更简洁、更 Pythonic,但要“用得清晰,不要炫技”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Telason!
