牛叔叔 的笔记

好好学习

2026-01-22 08:56

Python 推导式规则总结

牛叔叔

Python

(39)

(0)

收藏



一、基本语法结构

1. 列表推导式(List Comprehension)

python

编辑

[expression for item in iterable if condition]
  • 作用:快速创建列表。

  • 示例:

    python

    编辑

    squares = [x**2 for x in range(10)]evens = [x for x in range(20) if x % 2 == 0]

2. 集合推导式(Set Comprehension)

python

编辑

{expression for item in iterable if condition}
  • 作用:创建去重的无序集合。

  • 示例:

    python

    编辑

    unique_lengths = {len(word) for word in words}

3. 字典推导式(Dict Comprehension)

python

编辑

{key_expr: value_expr for item in iterable if condition}
  • 作用:快速构建字典。

  • 示例:

    python

    编辑

    square_map = {x: x**2 for x in range(5)}# {'a': 1, 'b': 2} → 反转键值对inv_dict = {v: k for k, v in original_dict.items()}

4. 生成器表达式(Generator Expression)

python

编辑

(expression for item in iterable if condition)
  • 作用:惰性求值,节省内存。

  • 注意:使用圆括号 (),但不是元组推导式(Python 没有元组推导式)。

  • 示例:

    python

    编辑

    gen = (x**2 for x in range(10))sum_of_squares = sum(gen)  # 仅在需要时计算

二、推导式的通用规则

  1. 核心结构:[表达式 + for 循环 + 可选 if 条件]

  2. 支持嵌套循环:

    python

    编辑

    [(x, y) for x in range(3) for y in range(2)]# 等价于嵌套 for 循环
  3. 条件可出现在末尾(过滤)或表达式中(三元操作):

    python

    编辑

    # 过滤[x for x in data if x > 0]# 表达式中使用条件[x if x > 0 else 0 for x in data]
  4. 避免副作用:推导式应保持纯函数风格,不要在其中修改外部变量。

  5. 可读性优先:过于复杂的推导式应改用普通循环。


三、常用场景

表格

场景示例
数据转换[str(x) for x in numbers]
数据过滤[name for name in names if name.startswith('A')]
去重处理{x.lower() for x in words}
构建映射{k: v*2 for k, v in config.items()}
惰性计算(大文件/大数据)(line.strip() for line in open('file.txt'))
矩阵/嵌套结构扁平化[num for row in matrix for num in row]
反转字典{v: k for k, v in d.items()}(要求值唯一)

四、注意事项

  • 性能:推导式通常比等效的 for 循环更快(C 层优化)。

  • 内存 vs 惰性:列表/集合/字典推导式立即生成全部结果;生成器表达式按需计算,适合大数据。

  • 不可滥用:多层嵌套或复杂逻辑会降低可读性,此时应使用传统循环。

  • 作用域:在 Python 3 中,推导式有自己的局部作用域(不会污染外部变量)。


五、小结

Python 的推导式是一种声明式编程风格,能以简洁、高效的方式完成常见容器构建任务。掌握其语法规则和适用场景,有助于写出更 Pythonic 的代码。

✅ 建议:简单逻辑用推导式,复杂逻辑用函数或循环。


0条评论

点击登录参与评论