Python 推导式 (Comprehensions)
推导式是 Python 中一种非常强大且富有表达力的语法糖,它允许你用一种非常简洁的方式从一个已有的可迭代对象(如列表、元组、集合等)创建新的列表、字典或集合。
使用推导式不仅能让代码更短、更易读,通常也比使用传统的 for 循环更快。
列表推导式 (List Comprehensions)
列表推导式提供了一种创建列表的紧凑语法。
基本语法:[expression for item in iterable]
示例:创建一个包含 0 到 9 平方的列表
传统 for 循环方式:
python
squares = []
for x in range(10):
squares.append(x**2)
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]使用列表推导式:
python
squares = [x**2 for x in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]带条件的列表推导式
你可以在推导式后面添加一个 if 条件来筛选元素。
语法:[expression for item in iterable if condition]
示例:创建一个只包含偶数的平方的列表
python
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # 输出: [0, 4, 16, 36, 64]带 if-else 的列表推导式
你也可以在表达式部分使用 if-else 来根据条件决定元素的值。
语法:[expression_if_true if condition else expression_if_false for item in iterable]
示例:将奇数变为负数,偶数不变
python
numbers = [x if x % 2 == 0 else -x for x in range(10)]
print(numbers) # 输出: [0, -1, 2, -3, 4, -5, 6, -7, 8, -9]字典推导式 (Dictionary Comprehensions)
与列表推导式类似,字典推导式用于快速创建字典。
语法:{key_expression: value_expression for item in iterable}
示例:创建一个数字及其平方的字典
python
square_dict = {x: x**2 for x in range(5)}
print(square_dict) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}示例:从一个列表创建字典
python
fruits = ["apple", "banana", "cherry"]
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
print(fruit_lengths) # 输出: {'apple': 5, 'banana': 6, 'cherry': 6}集合推导式 (Set Comprehensions)
集合推导式的语法与列表推导式几乎完全相同,只是使用大括号 {}。
语法:{expression for item in iterable}
示例:从一个有重复元素的列表中创建一个不重复的平方集合
python
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = {x**2 for x in numbers}
print(unique_squares) # 输出: {1, 4, 9, 16, 25}推导式是 Pythonic 编程风格的重要组成部分,熟练使用它们可以大大提高你的编码效率和代码质量。