每天学Python21:推导式

每天学Python21:推导式
最新回答
夏树繁花

2026-10-21 18:54:26

Python推导式是一种高效的数据处理方式,能够从一个数据序列快速构建另一个新的数据序列。它支持列表、字典、集合和生成器等多种数据结构,语法简洁且功能强大。以下是各类推导式的详细说明及示例:

1. 列表推导式(List Comprehension)

格式:[out_exp_res for out_exp in input_list if condition]

  • out_exp_res:生成元素的表达式(如函数或运算)。
  • input_list:输入的数据序列。
  • condition(可选):过滤条件,仅保留满足条件的元素。

示例:

# 生成0-9的平方列表squares = [x2 for x in range(10)] # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件的列表推导式even_squares = [x2 for x in range(10) if x % 2 == 0] # 输出: [0, 4, 16, 36, 64]2. 字典推导式(Dict Comprehension)

格式:{key_expr: value_expr for value in collection if condition}

  • key_expr:键的表达式。
  • value_expr:值的表达式。
  • collection:输入的可迭代对象(如列表、字典等)。

示例:

# 将列表转换为字典(元素为键,平方为值)num_dict = {x: x2 for x in range(5)} # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# 交换字典的键值对original_dict = {'a': 1, 'b': 2}swapped_dict = {v: k for k, v in original_dict.items()} # 输出: {1: 'a', 2: 'b'}3. 集合推导式(Set Comprehension)

格式:{expression for item in Sequence if conditional}

  • expression:生成集合元素的表达式。
  • Sequence:输入的可迭代对象。

示例:

# 生成平方数的集合(自动去重)unique_squares = {x2 for x in [-2, -1, 0, 1, 2]} # 输出: {0, 1, 4}4. 元组推导式(生成器表达式)

格式:(expression for item in Sequence if conditional)

  • 返回的是生成器对象,需通过tuple()或迭代使用。

示例:

# 生成元组的生成器表达式gen_expr = (x2 for x in range(5))tuple_result = tuple(gen_expr) # 输出: (0, 1, 4, 9, 16)# 直接迭代生成器for num in (x for x in range(3)): print(num) # 输出: 0 1 2关键注意事项
  1. 可读性优先:避免复杂嵌套,必要时拆分为多行或使用传统循环。# 不推荐:过度复杂的推导式result = [x+y for x in range(10) if x > 5 for y in range(5) if y != 2]
  2. 性能考量:推导式通常比显式循环更快,但生成器表达式适合处理大规模数据(惰性求值)。
  3. 与循环的对比:# 传统循环实现列表推导式squares = []for x in range(10): squares.append(x2)
总结

推导式是Python中高效处理数据的利器,合理使用能显著提升代码简洁性与执行效率。根据需求选择合适类型(列表、字典、集合或生成器),并始终以代码可读性为前提。