Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构
上一期小练习解答(第6期回顾)
✅ 练习1:统计文件行数
with open("data.txt", "r", encoding="utf-8") as f:lines = f.readlines()print(f"总行数:{len(lines)}")
✅ 练习2:反转每行写入新文件
with open("data.txt", "r", encoding="utf-8") as f_in, open("reversed.txt", "w", encoding="utf-8") as f_out:for line in f_in:f_out.write(line.strip()[::-1] + "\n")
✅ 练习3:筛选以 "A" 开头的名字
with open("names.txt", "r", encoding="utf-8") as f_in, open("a_names.txt", "w", encoding="utf-8") as f_out:for name in f_in:if name.strip().startswith("A"):f_out.write(name)
本期主题:列表推导式与字典推导式
🟦 7.1 什么是推导式?
推导式(Comprehensions)是 Python 中优雅、高效的语法糖,用于快速生成列表、集合或字典。
7.2 列表推导式(List Comprehension)
✅ 基本语法:
[表达式 for 变量 in 可迭代对象 if 条件]
示例1:平方一个列表中的所有元素
nums = [1, 2, 3, 4, 5]
squares = [x**2 for x in nums]
print(squares) # [1, 4, 9, 16, 25]
示例2:筛选出偶数
evens = [x for x in nums if x % 2 == 0]
print(evens) # [2, 4]
示例3:嵌套循环(乘法表)
table = [(i, j, i*j) for i in range(1, 4) for j in range(1, 4)]
print(table) # [(1,1,1), (1,2,2), ..., (3,3,9)]
7.3 字典推导式(Dict Comprehension)
✅ 基本语法:
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
示例1:创建键为数值、值为其平方的字典
squares = {x: x**2 for x in range(5)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
示例2:过滤字典中值大于 10 的项
d = {'a': 5, 'b': 12, 'c': 7}
filtered = {k: v for k, v in d.items() if v > 10}
print(filtered) # {'b': 12}
7.4 集合推导式(Set Comprehension)
与列表推导式类似,只是使用 {}
生成集合:
squares = {x**2 for x in [1, 2, 2, 3]}
print(squares) # {1, 4, 9}
小技巧对比:传统写法 vs 推导式
传统写法:
result = []
for i in range(10):if i % 2 == 0:result.append(i)
推导式写法:
result = [i for i in range(10) if i % 2 == 0]
推导式更加简洁、表达意图明确,是 Pythonic 写法的重要体现。
本期小练习
-
使用列表推导式生成所有 1~100 中能被 3 或 5 整除的数。
-
给定一个字符串列表
["apple", "banana", "grape"]
,生成一个字典,其键为字符串,值为长度。 -
创建一个乘法字典:键为
(i, j)
,值为i * j
,其中i
和j
范围为 1~5。 -
用集合推导式找出一个列表中所有唯一的偶数。
本期小结
-
学习了 推导式的三种形式:列表、字典、集合
-
熟悉了它们的 基本语法和使用场景
-
掌握了通过 条件语句和嵌套循环 构建复杂数据结构的方法
第8期预告:
下一期我们将讲解:
-
匿名函数 lambda
-
函数作为参数传递
-
内置高阶函数:
map()
、filter()
、reduce()
-
函数式编程初体验!