目录
1. 引言
推导式(Comprehensions)是 Python 提供的一种简洁高效的语法,使代码更加优雅,适用于创建列表、字典、集合以及生成器。
本教程将详细介绍 列表推导式、字典推导式、集合推导式、生成器推导式 的语法和使用方式。
2. Python 推导式概述
2.1 什么是推导式
推导式是一种简洁的语法,用于从 可迭代对象(如列表、元组、字典、集合等)创建新的数据结构,减少 for
循环的使用,使代码更简洁可读。
2.2 推导式的优点
- 代码简洁:减少
for
循环的冗余代码。 - 性能优越:比普通
for
循环更高效(尤其是生成器推导式)。 - 可读性高:简明扼要,提高代码质量。
3. 列表推导式
3.1 基本语法
1 | [表达式 for 变量 in 可迭代对象] |
示例:生成一个 0-9 的平方数列表
1 2 | squares = [x ** 2 for x in range(10)] print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] |
3.2 带条件判断的列表推导式
1 | [表达式 for 变量 in 可迭代对象 if 条件] |
示例:筛选出 1-20 之间的偶数
1 2 | evens = [x for x in range(1, 21) if x % 2 == 0] print(evens) # 输出: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] |
3.3 多重循环的列表推导式
1 | [表达式 for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2] |
示例:生成 (x, y) 组合的列表
1 2 | pairs = [(x, y) for x in range(3) for y in range(2)] print(pairs) # 输出: [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)] |
4. 字典推导式
语法:
1 | {key_expr: value_expr for 变量 in 可迭代对象} |
示例:创建一个数字平方的字典
1 2 | square_dict = {x: x ** 2 for x in range(5)} print(square_dict) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} |
示例:交换字典的键值
1 2 3 | original_dict = {"a": 1, "b": 2, "c": 3} swapped_dict = {v: k for k, v in original_dict.items()} print(swapped_dict) # 输出: {1: 'a', 2: 'b', 3: 'c'} |
5. 集合推导式
语法:
1 | {表达式 for 变量 in 可迭代对象} |
示例:获取唯一字母集合
1 2 | unique_chars = {char for char in "hello world"} print(unique_chars) # 输出: {' ', 'd', 'e', 'h', 'l', 'o', 'r', 'w'} |
6. 生成器推导式
生成器推导式与列表推导式类似,但使用 圆括号 ()
,返回一个 生成器对象,支持 惰性求值,减少内存占用。
语法:
1 | (表达式 for 变量 in 可迭代对象) |
示例:生成 0-9 的平方数(不会立即计算)
1 2 3 4 | squares_gen = (x ** 2 for x in range(10)) print(next(squares_gen)) # 输出: 0 print(next(squares_gen)) # 输出: 1 print(list(squares_gen)) # 输出: [4, 9, 16, 25, 36, 49, 64, 81] |
7. 完整示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 列表推导式 - 获取偶数 evens = [x for x in range(1, 11) if x % 2 == 0] # 字典推导式 - 生成数字平方字典 square_dict = {x: x ** 2 for x in range(1, 6)} # 集合推导式 - 获取唯一字母集合 unique_letters = {char for char in "banana"} # 生成器推导式 - 惰性生成平方数 squares_gen = (x ** 2 for x in range(5)) print(evens) # [2, 4, 6, 8, 10] print(square_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} print(unique_letters) # {'b', 'n', 'a'} print(list(squares_gen)) # [0, 1, 4, 9, 16] |
8. 结论
Python 推导式是一种强大的数据构造方式,使代码更加 简洁、高效、可读性强。
- 列表推导式:适用于创建列表。
- 字典推导式:适用于创建键值对映射。
- 集合推导式:适用于去重数据。
- 生成器推导式:适用于大数据集的惰性计算。
9. 参考资料
- Python 官方文档 – 推导式:https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
- Real Python – Python Comprehensions:https://realpython.com/list-comprehensions-python/
- W3Schools – Python Comprehensions:https://www.w3schools.com/python/python_lists_comprehension.asp
站内链接:
发表回复