目录
1. 引言
推导式(Comprehensions)是 Python 提供的一种简洁高效的语法,使代码更加优雅,适用于创建列表、字典、集合以及生成器。
本教程将详细介绍 列表推导式、字典推导式、集合推导式、生成器推导式 的语法和使用方式。
2. Python 推导式概述
2.1 什么是推导式
推导式是一种简洁的语法,用于从 可迭代对象(如列表、元组、字典、集合等)创建新的数据结构,减少 for
循环的使用,使代码更简洁可读。
2.2 推导式的优点
- 代码简洁:减少
for
循环的冗余代码。 - 性能优越:比普通
for
循环更高效(尤其是生成器推导式)。 - 可读性高:简明扼要,提高代码质量。
3. 列表推导式
3.1 基本语法
[表达式 for 变量 in 可迭代对象]
示例:生成一个 0-9 的平方数列表
squares = [x ** 2 for x in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3.2 带条件判断的列表推导式
[表达式 for 变量 in 可迭代对象 if 条件]
示例:筛选出 1-20 之间的偶数
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 多重循环的列表推导式
[表达式 for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2]
示例:生成 (x, y) 组合的列表
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. 字典推导式
语法:
{key_expr: value_expr for 变量 in 可迭代对象}
示例:创建一个数字平方的字典
square_dict = {x: x ** 2 for x in range(5)}
print(square_dict) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
示例:交换字典的键值
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. 集合推导式
语法:
{表达式 for 变量 in 可迭代对象}
示例:获取唯一字母集合
unique_chars = {char for char in "hello world"}
print(unique_chars) # 输出: {' ', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}
6. 生成器推导式
生成器推导式与列表推导式类似,但使用 圆括号 ()
,返回一个 生成器对象,支持 惰性求值,减少内存占用。
语法:
(表达式 for 变量 in 可迭代对象)
示例:生成 0-9 的平方数(不会立即计算)
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. 完整示例
# 列表推导式 - 获取偶数
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
站内链接:
发表回复