news 2026/5/25 10:41:46

Python 四种推导式一网打尽:列表、集合、字典、生成器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 四种推导式一网打尽:列表、集合、字典、生成器

推导式是 Python 独有的语法糖,能用一行代码代替好几行循环。
很多初学者看到{n for n in nums if n%2==0}这样的代码一脸懵。
这篇文章用一个例子讲透四种推导式,看完你也能写出优雅的 Python 代码。


📘 本期速览

  • 四种推导式对比一览
  • 列表推导式(最常用)
  • 集合推导式(自动去重)
  • 字典推导式(键值对)
  • 生成器表达式(省内存)
  • 性能对比与选择建议

一、四种推导式对比一览

以同一个数据为例:

nums={1,2,3,4,5,6}# 原始数据
类型代码输出符号
列表推导式[n for n in nums if n%2==0][2, 4, 6][]
集合推导式{n for n in nums if n%2==0}{2, 4, 6}{}
字典推导式{n: n**2 for n in nums if n%2==0}{2:4, 4:16, 6:36}{k:v}
生成器表达式(n for n in nums if n%2==0)<generator object>()

💡 记住这个规律:[]得列表,{}得集合,{k:v}得字典,()得生成器


二、列表推导式 ——[]

最常用的推导式,输出一个列表

基础用法

nums={1,2,3,4,5,6}# 筛选偶数result=[nforninnumsifn%2==0]print(result)# [2, 4, 6]

带 else 的条件

# if-else 需要写在 for 前面tags=["偶数"ifn%2==0else"奇数"forninnums]print(tags)# ['奇数', '偶数', '奇数', '偶数', '奇数', '偶数']

对元素进行运算

# 计算平方squared=[n**2forninnums]print(squared)# [1, 4, 9, 16, 25, 36]

等价于传统写法

# 上面的代码等价于:result=[]forninnums:ifn%2==0:result.append(n)print(result)# [2, 4, 6]

✅ 列表推导式能让代码更简洁、更 Pythonic。


三、集合推导式 ——{}

输出一个集合,特点是自动去重、无序

基础用法

nums={1,2,3,4,5,6}# 筛选偶数result={nforninnumsifn%2==0}print(result)# {2, 4, 6}

自动去重

# 原数据有重复时,集合会自动去重data=[1,2,2,3,4,4,5,6,6]unique_evens={nfornindataifn%2==0}print(unique_evens)# {2, 4, 6}

⚠️ 注意:空集合不能写成{}(那是空字典),必须用set()


四、字典推导式 ——{k: v}

输出一个字典,需要同时指定键和值。

基础用法

nums={1,2,3,4,5,6}# 键=原数,值=平方result={n:n**2forninnumsifn%2==0}print(result)# {2: 4, 4: 16, 6: 36}

键值判断

# 键=原数,值=奇偶性parity={n:("偶数"ifn%2==0else"奇数")forninnums}print(parity)# {1: '奇数', 2: '偶数', 3: '奇数', 4: '偶数', 5: '奇数', 6: '偶数'}

交换字典的键和值

original={"a":1,"b":2,"c":3}swapped={v:kfork,vinoriginal.items()}print(swapped)# {1: 'a', 2: 'b', 3: 'c'}

💡 字典推导式特别适合做数据转换键值互换


五、生成器表达式 ——()

输出一个生成器对象,特点是惰性求值、省内存

基础用法

nums={1,2,3,4,5,6}# 创建生成器(注意是圆括号)gen=(nforninnumsifn%2==0)print(gen)# <generator object <genexpr> at 0x...>

三种取值方式

# 方式1:转换为列表(一次性取完)gen=(nforninnumsifn%2==0)print(list(gen))# [2, 4, 6]# 方式2:用 for 循环遍历gen=(nforninnumsifn%2==0)forvalingen:print(val)# 2 \n 4 \n 6# 方式3:用 next() 逐个取值gen=(nforninnumsifn%2==0)print(next(gen))# 2print(next(gen))# 4print(next(gen))# 6# print(next(gen)) # StopIteration 错误

⚠️ 生成器只能遍历一次,取完就没有了。


六、性能与内存对比

importsys nums=range(1,1000001)# 100万个数字# 列表推导式:立即生成全部结果,占用大量内存lst=[nforninnumsifn%2==0]print(f"列表占用:{sys.getsizeof(lst)}字节")# 约 8MB# 生成器表达式:几乎不占内存gen=(nforninnumsifn%2==0)print(f"生成器占用:{sys.getsizeof(gen)}字节")# 约 112 字节
类型内存占用适用场景
列表推导式数据量小、需要多次使用
集合/字典推导式中等需要去重或键值对
生成器表达式极小数据量大、只遍历一次

七、选择建议速查表

你的需求推荐使用
需要索引或顺序列表推导式[]
需要去重集合推导式{}
需要键值对字典推导式{k:v}
数据量大 + 只遍历一次生成器表达式()
需要多次使用结果列表/集合/字典推导式

八、避坑提醒

⚠️常见错误1:空集合用{}

wrong={}# 这是空字典,不是空集合!correct=set()# 这才是空集合

⚠️常见错误2:if-else 位置写错

# 筛选条件(没有 else)→ if 写在后面[nforninnumsifn>0]# 条件表达式(有 else)→ if-else 写在前面[nifn>0else0forninnums]

⚠️常见错误3:生成器被多次遍历

gen=(nfornin[1,2,3])print(list(gen))# [1,2,3]print(list(gen))# [] 已经消耗完了!

九、一句话总结

[]得列表,{}得集合,{k:v}得字典,()得生成器

把这四种推导式记牢,你的 Python 代码会变得更加简洁、优雅、高效。


📚 延伸阅读

如果你想继续深入,可以看:

  • 嵌套推导式(多层循环)
  • 推导式中的条件过滤进阶
  • 生成器与迭代器的底层原理

如果觉得有用,欢迎点赞、收藏、转发给朋友。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 16:20:19

谷歌外链怎么发?西语和德语小语种网站建外链的3个实操技巧

一、 德国严格审查标准的数字剖析德国莱茵TV认证标准深刻影响了本国站长审核外部资料的习惯。从Ahrefs数据库中抽取1000个排名前列的德国国家专属后缀网站&#xff0c;88.5%配备了由执业律师起草的Impressum法律声明页。向德国本地科技博客主发送附带长度超过800词的区域市场调…

作者头像 李华
网站建设 2026/5/22 16:19:17

2026实测:租用RTX 4090 CUDA适配与PyTorch精准安装教程

RTX 4090搭载Ada Lovelace架构、4nm制程工艺&#xff0c;配备16384个CUDA核心、24GB GDDR6X显存、1TB/s显存带宽&#xff0c;FP32算力82.6 TFLOPS&#xff0c;是7B-13B大模型训练、图像识别、深度学习推理的核心主流算力。个人开发者、中小团队自建RTX 4090硬件&#xff0c;存在…

作者头像 李华
网站建设 2026/5/22 16:17:03

Go语言实战:构建高可用API + HASH上链存证服务,这不是妥协而是最优解

关键词:Go, 区块链, 存证, SHA256, 签名, 高并发 前言 在关于区块链落地的技术讨论中,"链下计算 + 链上存证"模式常常被贴上"妥协方案"的标签。很多人认为,只有把数据完全搬到链上,才能体现区块链的价值。 然而,经过大规模生产环境的验证,我们发现…

作者头像 李华
网站建设 2026/5/22 16:15:02

初始虚拟地址

一、代码&#xff1a;看见虚拟地址空谈理论晦涩难懂&#xff0c;我们从一段简单的父子进程代码入手&#xff0c;通过直观的运行现象&#xff0c;发现内存地址的隐藏秘密&#xff0c;这也是理解虚拟地址空间的最佳切入点。1.1 测试代码1.2 运行结果与现象运行现象&#xff1a;父…

作者头像 李华
网站建设 2026/5/22 16:14:07

3步免费获取百度文库纯净文档:告别广告干扰与付费限制

3步免费获取百度文库纯净文档&#xff1a;告别广告干扰与付费限制 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库作为国内最大的文档分享平台&#xff0c;为无数用户提供了宝贵的知识资源…

作者头像 李华