🐍Python 常用容器与迭代

推导式与生成器表达式

面试回答

常见问法

列表推导式、字典推导式、集合推导式和生成器表达式有什么区别?

回答

推导式的核心价值是“用更紧凑的方式构造新容器”,而生成器表达式则是惰性生成值,不会一次性构造完整结果。

nums = [x * x for x in range(5)]
mapping = {x: x * x for x in range(5)}
unique = {x % 3 for x in range(10)}
lazy = (x * x for x in range(5))

追问

  • 为什么生成器表达式更省内存
  • 推导式是不是一定更快
  • 推导式里嵌套太多层为什么不推荐

原理展开

列表推导式会立刻生成列表:

result = [x for x in range(1000000)]

生成器表达式则按需产出:

result = (x for x in range(1000000))

因此面试里常见结论是:

  • 需要最终容器结果,用推导式
  • 数据量大、按需消费,用生成器表达式

推导式是 Pythonic,但不代表越短越好。如果嵌套层次太多,可读性会急剧下降。

易错点

  • 认为推导式总优于普通循环
  • 把生成器表达式当成元组
  • 为了“写得短”牺牲可读性