目录

  1. 引言
  2. Python 推导式概述
  3. 列表推导式
  4. 字典推导式
  5. 集合推导式
  6. 生成器推导式
  7. 完整示例
  8. 结论
  9. 参考资料

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. 参考资料

  1. Python 官方文档 – 推导式https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
  2. Real Python – Python Comprehensionshttps://realpython.com/list-comprehensions-python/
  3. W3Schools – Python Comprehensionshttps://www.w3schools.com/python/python_lists_comprehension.asp

站内链接