推导式和生成器表达式有什么区别?

一句话总结区别

推导式(列表/字典/集合):一次性把所有数据造好,占内存。

生成器表达式:不提前造数据,用一个造一个,超级省内存。


1. 符号不同(一眼区分)

python 复制代码
# 列表推导式
[x for x in range(10)]    # [] → 列表

# 字典推导式
{x:x*2 for x in range(10)} # {} → 字典

# 集合推导式
{x for x in [1,2,2,3]}    # {} → 集合

# 生成器表达式
(x for x in range(10))    # () → 生成器

2. 执行方式完全不同(最重要!)

✅ 推导式:立即执行,全部生成

你写出来那一刻,所有数据已经在内存里了

python 复制代码
nums = [x for x in range(1000000)]
# 100万个数字瞬间生成 → 占内存

✅ 生成器表达式:惰性执行,用到才生成

你写出来那一刻,一个数据都没生成

只有你去遍历/取数时,它才生成一个,用完就丢。

python 复制代码
nums = (x for x in range(1000000))
# 不占内存!只有调用 next() 或 for 循环才生成

3. 内存占用天差地别

推导式

数据量越大,占内存越多。

100万条数据 = 100万条同时存在内存里。

生成器

无论多少数据,永远只占一点点内存

因为它不存储数据,只存储生成数据的规则


4. 能不能重复使用?

推导式:可以反复用

python 复制代码
lst = [1,2,3,4]
print(list(lst))  # [1,2,3,4]
print(list(lst))  # [1,2,3,4]

生成器:只能用一次!(大坑)

python 复制代码
gen = (x for x in range(4))

print(list(gen))  # [0,1,2,3]
print(list(gen))  # [] 空了!耗尽了!

5. 速度对比

  • 推导式:创建慢一点,读取快
  • 生成器:创建极快,读取逐个来

终极对比表(最好记)

特性 推导式(列表/字典/集合) 生成器表达式
符号 [] {} ()
生成方式 一次性全部生成 惰性生成(用一个造一个)
内存占用 极低
可迭代次数 无限次 只能迭代一次
支持方法 所有列表/字典/集合方法 只能迭代、next()
使用场景 数据量小、需要反复使用 数据量大、只遍历一次

最简单的记忆口诀

小数据、要复用 → 用推导式

大数据、省内存 → 用生成器


总结

  1. 推导式容器,装着所有数据。
  2. 生成器工厂,只生产,不存货。
  3. 生成器只能用一次,推导式可以无限用。
  4. 处理百万/千万级数据一定要用生成器,不然程序会卡死。

相关推荐
金銀銅鐵1 小时前
n^5 和 n 的个位数是否总相等?
python·数学
aqi004 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵4 小时前
借助 Pygame 探索最大公约数的规律
python·数学·游戏
ServBay21 小时前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户83562907805121 小时前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python
用户8356290780511 天前
使用 Python 管理 Excel 工作表:创建、复制、删除与重命名
后端·python
荣码1 天前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
用户8356290780512 天前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
宇宙之一粟2 天前
乐企版式文件生成平台
java·后端·python