Python 列表/字典推导式
Python 推导式 · 难度:进阶 · +15XP
Python 推导式
推导式(Comprehension)是Python中快速创建列表、字典、集合的简洁语法。一行代码就能完成原来需要for循环+条件判断的组合操作,使代码更Pythonic。
列表推导式
语法:[表达式 for 变量 in 可迭代对象 if 条件]
# 传统方式
squares = []
for i in range(10):
if i % 2 == 0:
squares.append(i**2)
# squares = [0, 4, 16, 36, 64]
# 推导式 — 一行搞定!
squares = [i**2 for i in range(10) if i % 2 == 0]
字典推导式
# 将两个列表合并为字典
keys = ['name', 'age', 'city']
values = ['张三', 25, '南宁']
person = {k: v for k, v in zip(keys, values)}
# {'name': '张三', 'age': 25, 'city': '南宁'}
# 过滤字典
scores = {'语文': 85, '数学': 60, '英语': 92}
passed = {k: v for k, v in scores.items() if v >= 60}
# {'语文': 85, '数学': 60, '英语': 92}
集合推导式
# 提取所有不重复的首字母
words = ['python', 'java', 'php', 'perl', 'rust']
initials = {w[0] for w in words}
# {'p', 'j', 'r'}
# 平方数集合(自动去重)
nums = {x**2 for x in range(-3, 4)}
# {0, 1, 4, 9}
推导式对比
| 类型 | 语法 | 示例 |
|---|---|---|
| 列表 | [x for x in ...] | [x*2 for x in range(5)] |
| 字典 | {k:v for k,v in ...} | {x:x**2 for x in range(5)} |
| 集合 | {x for x in ...} | {x%3 for x in range(10)} |
| 生成器 | (x for x in ...) | (x**2 for x in range(10)) |
注意:生成器推导式使用()而非[],不会一次性创建所有元素,而是惰性求值,适用于处理海量数据。
嵌套推导式(处理二维列表)
matrix = [[1,2,3], [4,5,6], [7,8,9]]
# 展平二维列表
flat = [num for row in matrix for num in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 转置矩阵
transposed = [[row[i] for row in matrix] for i in range(3)]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
实战练习
- 用列表推导式生成1-100内所有能被3或5整除的数
- 给定字典{key:value},用字典推导式交换键值对
- 将字符串列表转为长度字典{"apple":5, "go":2, ...}
- 用推导式过滤出列表中长度≥5的单词并转为大写