🐍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,但不代表越短越好。如果嵌套层次太多,可读性会急剧下降。
易错点
- 认为推导式总优于普通循环
- 把生成器表达式当成元组
- 为了“写得短”牺牲可读性