CodeWalk

列表推导式和生成器表达式的区别

作者:Yahuda · 2026-05-30 12:55

列表推导式 [x*2 for x in range(10)] 和生成器表达式 (x*2 for x in range(10)) 有何区别?

回答

Yahuda

  1. 语法:列表推导式用 [],生成器表达式用 ()
  2. 内存:列表推导式立即生成完整列表(O(n) 内存);生成器表达式惰性求值,每次迭代生成一个值(O(1) 内存)。
  3. 性能:生成器表达式适合处理大数据集,避免内存溢出。
  4. 可用操作:列表推导式结果可索引、切片;生成器表达式只能迭代一次。
  5. 示例sum(x*2 for x in range(10**7)) 用生成器节省内存。