🧠 会用
[]包住个for就说会推导式?今天我们来解锁推导式的隐藏技能树:嵌套、条件、组合、生成器通吃!
✅ 本文目标
- 理解列表推导式的结构和性能优势
- 掌握条件过滤、嵌套推导、字典/集合推导
- 实战场景:二维数组拉平、过滤、格式转换等
🧩 一、基础语法复习
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
等价于:
squares = []
for x in range(5):
squares.append(x**2)
🔍 二、加入条件筛选:让它有“判断力”
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]
结构:
[表达式 for 变量 in 可迭代对象 if 条件]
🔁 三、嵌套循环:生成组合对 / 二维网格
pairs = [(x, y) for x in [1, 2, 3] for y in ['a', 'b']]
print(pairs)
# [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
等价于:
for x in [1,2,3]:
for y in ['a','b']:
print((x, y))
🔢 四、二维数组拉平(常用于 NLP / 图像处理)
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [x for row in matrix for x in row]
print(flattened) # [1, 2, 3, 4, 5, 6]
注意:先 row,再 x。对应
for row in matrix→for x in row
💡 五、字典推导式 / 集合推导式
words = ["apple", "banana", "cherry"]
d = {word: len(word) for word in words}
print(d) # {'apple': 5, 'banana': 6, 'cherry': 6}
nums = [1, 2, 2, 3, 4]
s = {x for x in nums if x % 2 == 0}
print(s) # {2, 4}
🧠 六、嵌套推导式实战:构造 9×9 乘法表
table = [f"{i}×{j}={i*j}" for i in range(1, 10) for j in range(1, i+1)]
配合格式美化:
for i in range(1, 10):
row = [f"{j}×{i}={i*j}" for j in range(1, i+1)]
print(" ".join(row))
🧪 实战:日志格式转换器(字符串格式处理)
原始数据:
raw_logs = [
"user1: 200 OK",
"user2: 500 ERROR",
"user3: 404 NOT FOUND"
]
提取用户和状态码:
log_data = [{"user": line.split(":")[0], "code": int(line.split()[1])} for line in raw_logs]
print(log_data)
# [{'user': 'user1', 'code': 200}, {'user': 'user2', 'code': 500}, ...]
🔥 高阶技巧:内联 if(表达式中的三元操作)
flags = [True, False, True]
results = ["开启" if flag else "关闭" for flag in flags]
print(results) # ['开启', '关闭', '开启']
🛠 BONUS 项目:词频统计过滤器(词长 ≥5)
text = "python is a great language and python is fun"
words = text.split()
filtered = [w for w in words if len(w) >= 5]
print(filtered) # ['python', 'great', 'language', 'python']
🧠 总结一句话
列表推导式的精髓不是“简写”,而是高性能 + 可组合性 + 表达力