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

一句话总结区别

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

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


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. 处理百万/千万级数据一定要用生成器,不然程序会卡死。

相关推荐
代码山河3 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行3 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
梯度下降者3 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
“AI国潮设计-小江”5 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
benchmark_cc6 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读6 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下7 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐7 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹7 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi