11 - 推导式:Pythonic的代码风格

1 阅读2分钟

想系统提升编程能力、查看更完整的学习路线,欢迎访问 AI Compass:github.com/tingaicompa… 仓库持续更新刷题题解、Python 基础和 AI 实战内容,适合想高效进阶的你。

11 - 推导式:Pythonic的代码风格

学习目标: 掌握列表/字典/集合推导式


💻 代码示例

1. 列表推导式

# 传统方式
squares = []
for i in range(5):
    squares.append(i ** 2)
print(squares)  # [0, 1, 4, 9, 16]

# 列表推导式(一行搞定!)
squares = [i ** 2 for i in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

# 带条件
evens = [i for i in range(10) if i % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

# if-else
labels = ["偶数" if i % 2 == 0 else "奇数" for i in range(5)]
print(labels)  # ['偶数', '奇数', '偶数', '奇数', '偶数']

# 嵌套
matrix = [[i * j for j in range(3)] for i in range(3)]
print(matrix)  # [[0,0,0], [0,1,2], [0,2,4]]

# 展平二维列表
matrix = [[1, 2], [3, 4], [5, 6]]
flat = [num for row in matrix for num in row]
print(flat)  # [1, 2, 3, 4, 5, 6]

2. 字典推导式

# 创建字典
squares = {i: i ** 2 for i in range(5)}
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 过滤字典
scores = {"Alice": 90, "Bob": 75, "Charlie": 92}
passed = {name: score for name, score in scores.items() if score >= 80}
print(passed)  # {'Alice': 90, 'Charlie': 92}

# 键值互换
d = {"a": 1, "b": 2}
swapped = {v: k for k, v in d.items()}
print(swapped)  # {1: 'a', 2: 'b'}

3. 集合推导式

# 创建集合
squares = {i ** 2 for i in range(-5, 6)}
print(squares)  # {0, 1, 4, 9, 16, 25} (自动去重)

# 从字符串提取唯一字符
chars = {c for c in "hello"}
print(chars)  # {'h', 'e', 'l', 'o'}

🎯 在算法题中的应用

# 将二维列表展平
matrix = [[1,2,3], [4,5,6], [7,8,9]]
flat = [num for row in matrix for num in row]

# 过滤正数
nums = [-2, -1, 0, 1, 2]
positive = [x for x in nums if x > 0]

# 第3课:最长连续序列
num_set = set(nums)  # 或 {x for x in nums}

🎓 小结

✅ 列表推导式:[expr for x in iterable if cond] ✅ 字典推导式:{k: v for x in iterable} ✅ 集合推导式:{expr for x in iterable} ✅ 比传统循环更简洁、更Pythonic

下一步: 13-collections模块.md


如果这篇内容对你有帮助,推荐收藏 AI Compass:github.com/tingaicompa… 更多系统化题解、编程基础和 AI 学习资料都在这里,后续复习和拓展会更省时间。