第4.4节 Python解析与推导:列表解析、字典解析、集合解析

python推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),是python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共有三种推导,在python2和3中都有支持:.列表(list)推导式.字典(dict)推导式.集合(set)推导式一、列表推导式1、使用[]生成list    [表达式 for 变量 in 列表]  或者 [表达式 for 变量 in 列表 if 条件]例1:... 阅读详情

一、    引言
经过前几个章节的介绍,终于把与列表解析的前置内容介绍完了,本节老猿将列表解析、字典解析、集合解析进行统一的介绍。
前面章节老猿好几次说到了要介绍列表解析,但老猿认为涉及知识层面比较多,一推再推,给人的印象就是这个很复杂,其实整理完成后老猿发现其实很简单。所谓解析/解析式,也称为推导/推导式,对应英语单词为comprehension,是Python的一种独有特性。解析就是从一个数据序列构建另一个新的数据序列的结构体,其本质是使用一个可迭代对象,按一定规则通过表达式、函数等运算后得到一个新的迭代对象,列表解析得到的就是列表对象,字典解析得到的是字典,集合解析得到的是集合。

二、    语法释义
1.    列表解析:通过解析表达式从一个可迭代对象生成一个新的列表
[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]
其中:
语句中的中括号表示返回数据转换为列表。
expr为计算新列表元素值的表达式
iter_var:表示运算表达式处理的对象所在的容器,解析就是针对在可迭代对象iter_var中的每个元素进行表达式运算后得到的值作为新列表的元素过程;
if cond_exp:表示可迭代对象中的元素需要满足指定条件才会参与表达式运算,如果需要带多个条件,可以在if表达式后再叠加一个if表达式。如:
l=[chr(i+ord('A')) for i in range(26) if i%2==0 if i%3==0 if i%4==0 ]#结果为:['A', 'M', 'Y']

上面例子中:

ord(c)函数:返回字母c的unicode码,ASCII字符返回的就是ASCII码

chr(i)函数:返回一个unicode码对应的字符,0 <= i <= 0x10ffff,如果i是ASCII码的范围则返回ASCII字符

range是上一节介绍的函数,在此用于生成一个0到25的序列迭代的range对象。

上述列表解析的语句表示:用for访问range对象的每个元素i,当元素i能整除2、3、4即能被12整除时,就生成一个字母,该字母的ASCII码值为'A'的ASCII码值加上i的值,按照上述逻辑,i为0、12、 24时满足要求,对应的字母即为结果列表中的元素。

 

2.    集合解析:通过解析表达式从一个可迭代对象生成一个新的集合
{expr for iter_var in iterable }
{expr for iter_var in iterable if cond_expr}
    集合解析与列表解析的区别就是将列表解析的中括号换成大括号,以此决定返回值是一个集合,其他的没有什么不同。
注意:集合是会剔重的,如果出现重复值则只保留一个。

3.    字典解析:通过解析表达式从一个可迭代对象生成一个新的字典
{key_expr:value_expr for iter_var in iterable }
{key_expr:value_expr for iter_var in iterable if cond_expr }
字典解析也是使用大括号,但是必须在语句中同时指定键和值的计算表达式,确保生成的元素是使用冒号分隔的键-值对,其他的与集合解析类似。其中键的计算表达式为key_expr,值的计算表达式为value_expr。
注意:字典的键必须是唯一的,如果计算元素时出现键重合,如果出现重复值则只保留一个。
举例:用一个数字列表生成数字和字母(计算方法参考上面的例子)映射关系的字典数据
d={i:chr(ord('a')+i) for i in [1,1,2,3]}  #结果d的值为:{1: 'b', 2: 'c', 3: 'd'}
d={i:chr(ord('a')+i+index) for index,i in enumerate([1,1,2,3])} #结果d的值为:{1: 'c', 2: 'e', 3: 'g'},enumerate函数请参考上一节的介绍
上面例子可以看到,重复的键1只保留了一个字典元素,该元素保留的是该键最后一个值对应的键-值对。

三、    补充说明
1.    在生成器一节已经介绍了生成器解析,生成器解析实际上就是生成器表达式,在此不再赘述;
2.    在前面介绍时没有提到元组解析,同时当语句外面用小括号时实际对应的是生成器而不是元组,因此Python并没有元组解析这个概念,如果需要通过解析得到元组,可以通过列表解析、生成器解析方式先生成列表或生成器,再通过tuple方法将其转换为元组;
3.    虽然用语句循环赋值的方式也能实现上述几种解析方法,但使用解析的方法更精简、运行更快;
4.    解析不会改变参数中的原有迭代对象的值;
5.    在解析中使用多个for语句等同于多个for循环,如下面代码实现了两个列表生成第三个列表且其元素为前2个列表的笛卡尔积:
numb=[i for i in range(2)]
abc=[chr(ord('a')+k)  for k in range(2)]
d=[(a,n) for a in abc for n in numb] #结果为:[('a', 0), ('a', 1), ('b', 0), ('b', 1)]


    本节老猿详细总结了列表解析、集合解析、字典解析的概念及语法,并结合案例进行了说明。为了理解相关概念,老猿查了很多的资料,结合自己的理解总结出来这三种解析的定义及语法。其实理解之后,解析就是很简单的事情,希望老猿的介绍能帮助大家快速理解这三种解析。
     老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。 
欢迎大家批评指正,谢谢大家关注!

Python字典推导式与集合推导式:从基础到高级的全面指南 本文深入探讨了Python中字典推导式和集合推导式的使用场景、高级技巧和性能优化。首先,文章对比了列表、字典和集合推导式的语法、返回值类型、元素特性和典型用途。接着,详细解析了字典推导式的基础转换、条件过滤、键值转换和多数据源合并等应用,并展示了集合推导式在去重、复杂条件过滤和多集合运算中的实战应用。此外,文章还介绍了高级应用场景,如字典键值反转、矩阵转置和数据分组,并提供了性能分析与优化建议,包括推导式与传统方法的性能对比和大数据集处理优化。最后,文章总结了特殊技巧与常见陷阱,帮助读者避免在实际使用中可能 阅读详情

相关推荐

python基础:列表推导式、字典推导式、集合推导式

一、列表推导式 列表推导式(list comprehension)是利用其它列表创建新列表的一种方式, 工作原理类似for循环,即可对得到的元素进行转换或者筛选。 列表推导式的基本格式: 变量名=[表达式 for 变量 in 列表] 或者 变量名= [表达式 for 变量 in 列表 if 条件] 执行流程: 遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算。 或者遍历列表中的内容给变...

珂鸣玉的博客 615

Python列表解析与字典解析【秒懂】

1.列表解析 列表解析是通过序列中的每一个项运行一个表达式来创建新列表的方式,它是python迭代机制的一种应用。 语法格式: 表达式 for i in 列表名称 例: list1 = [1,6,40,31,101,23] list2 = [i+2 for i in list1] print(list2) 运行结果: [3, 8, 42, 33, 103, 25] 2.字典解析 例: dict1...

weixin_44994022的博客 917

列表推导式与字典推导式,滚雪球学 Python

列表推导式、字典推导式、集合推导式、生成器初识

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 2万+

字典解析式 python_python解析式

1.列表解析式语法:[返回值 for 元素 in 可迭代对象 if 条件]a = [i for i in range(10) if i % 3 == 0]输出内容:[0, 3, 6, 9]该表达式返回了一个新的列表,元素就是迭代循环的[0,10),等价于下面的写法b = []for i in range(10):if i % 3 == 0:b.append(i)同样也支持返回值的处理c = [(i...

weixin_32218919的博客 492

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码)

本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。

weixin_42563415的博客 721

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

疯狂的Python字典

这是一篇来自 Dan Bader 的博文,讲的是如何去研究一个意外的 Python 现象。译者 @Vimiix 同学,我对文章做了少量修改,Vimiix 是咱们的老朋友,...

Python之禅的专栏 348

FUXA实战:5步搞定基于Web的SCADA系统搭建(含Node.js版本避坑指南)

本文提供了一份基于开源工具FUXA搭建Web版SCADA系统的实战指南。文章重点解析了从环境准备到生产部署的五个核心步骤,并特别强调了Node.js版本选择对西门子S7 PLC通信兼容性的关键影响,帮助开发者避开常见陷阱,快速构建工业监控界面。

weixin_29172963的博客 138

Python的高级用法:字典解析式

字典解析式可用于根据现有的可迭代对象创建新的字典。在Python中,这种方式的语法非常直观,通常涉及一个迭代器、一个表达式对,以及一个可选的条件表达式。这与列表解析类似,但是创建的是字典而不是列表。

weixin_49520696的博客 678

RK3588零拷贝视频流水线实战:用GStreamer+Mpp实现8K硬解与DRM显示

本文深入探讨了在RK3588平台上构建零拷贝视频流水线的工程实践。通过结合GStreamer与MPP,实现了从8K视频硬解到DRM显示的全流程硬件加速,有效解决了高分辨率视频处理中的DDR带宽瓶颈问题。文章详细解析了dma-buf数据流机制、管道构建与性能优化策略,为多路视频并发处理提供了高效的系统架构解决方案。

github5actions的博客 1165

MiniMax H3 + ComfyUI 工作流搭建指南:从整合包到视频生成

AI视频生成正成为内容创作的新基础设施,而ComfyUI作为可视化工作流引擎,将复杂的模型推理过程拆解为节点与连线,让本地视频生成变得可复用、可批量。理解这一原理后,用户无需编写代码,只需掌握模型加载、提示词控制、采样与解码的基本链路,即可搭建出稳定的视频生产管线。MiniMax H3作为前沿视频生成模型,在ComfyUI中通过权重文件和自定义节点落地,配合整合包可大幅降低环境配置门槛。从硬件评估、目录结构到节点连接与参数调优,本文系统性梳理了从零跑通一条视频生成工作流的完整路径,帮助用户在批量素材生成、风

weixin_29057065的博客 411

Python解析式

在python中经常能够看到形如ret = [x ** 2 for x in lst]这样的赋值语句,对于从C++转到python的人不太容易理解这种for循环的使用,这就是python为了简洁而发明的新语法。python解析式有以下优点: 代码简洁,可读性强 效率比普通迭代稍高 python的解析式具体分为以下四种: 列表解析式 生成器解析式 集合解析式 字典解析式 下面分别介绍这四种解析式的使用。 列表解析式 列表解析式的形式 [expr for e in iterator] In [1

职场亮哥 522

195、大模型蒸馏与压缩:知识蒸馏与VLA模型轻量化

折腾完这一整套流程,最大的感悟是:知识蒸馏不是简单的模型压缩,而是知识迁移的工程艺术。每一步都有坑,每个参数都可能影响最终性能。给后来者的建议是:先别急着上蒸馏,把teacher模型的推理延迟和显存占用测清楚,确定瓶颈在哪里——是计算量太大还是内存带宽不够,这决定了你该用蒸馏还是量化还是剪枝。蒸馏训练时一定要监控每一层的特征对齐loss,别只看总loss。如果某一层的对齐loss特别高,说明student在这一层学歪了,需要调整该层的损失权重或者增加该层的投影头容量。

sundong_81的博客 110

python列表推导式、字典推导式、集合推导式

python列表推导式、字典推导式、集合推导式python列表推导式、字典推导式、集合推导式列表推导式生成list格式示例一:输出为==表达式==示例二:输出为==函数(有返回值)==生成generator字典推导式示例一:把字典中的key和value对调示例二:zip[^1]转换成字典集合推导式格式与列表推导式的区别示例: python列表推导式、字典推导式、集合推导式 推导式(comprehe...

Death Note 8904

【银河麒麟桌面系统】安装英伟达(NVIDIA)显卡驱动

本文详细介绍了在麒麟桌面操作系统V10 SP1(版本号2503)上安装NVIDIA RTX 5060显卡驱动的完整流程。主要内容包括:查看系统版本信息,从NVIDIA官网下载Linux 64位驱动,授予执行权限后运行安装程序,处理安装过程中的X server警告、32位库安装、DKMS模块选择等问题,以及安装完成后如何验证驱动状态。同时提供了卸载驱动的步骤和常见问题解决方案,如处理X server警告、libglvnd EGL依赖问题等。该指南适用于需要在国产麒麟系统上安装NVIDIA显卡驱动的用户,包含完

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 6309

1-Wire 单总线硬件结构及软件时序分析(实测波形+C代码分析)

1根线就可以通信,是不是很神奇?因为其节省I/O口的优点而被广泛使用!

记得诚 1万+

【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)详解

列表推导式、元组推导式、字典推导式、集合推导式列表推导式元组推导式字典推导式集合推导式 推导式(又称解析器),是 Python 独有的一种特性。 使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此推导式又可细分为列表推导式、元组推导式、字典推导式以及集合推导式。 列表推导式 列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。 列表推导式的语法格式如下: [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ] 此格式中,[if

一个写湿的程序猿 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python推导式大全与实战:精通列表、字典、集合和生成器推导式

Python语言以其简洁、优雅的语法而闻名,其中推导式是其独特之处之一。推导式是一种在一行代码中构建数据结构的强大方式,它涵盖了列表、字典、集合和生成器。本篇博客将全面介绍Python中的推导式,并通过实战演示展示其强大功能。

一键难忘的博客 5056

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python 中列表、元组、字典、集合方法集:全面解析与实战示例

本文系统梳理了Python中四种核心数据结构:列表(可变有序)、元组(不可变有序)、字典(键值映射)和集合(无序唯一)。详细介绍了各结构的增删改查方法,包括列表推导式、字典推导式等高效创建方式,并提供了对比表格和实用场景建议。重点阐述了列表排序反转、字典键值操作、集合运算等核心方法,同时给出列表去重、字典遍历等实战技巧。掌握这些数据结构及其方法能显著提升数据处理效率,建议根据数据特性和业务需求选择合适结构,并将本文作为速查参考。

2402_85519509的博客 2494

【python】python推导式——列表/元组/字典/集合 推导式

python推导式——列表/元组/集合/字典推导式使用介绍

sinat_41752325的博客 3048

Python核心数据结构解析:字典、集合与列表推导式

想要成为Python数据处理高手吗?这篇文章将带你深度掌握三大核心技能:字典的键值对魔法、集合的自动去重神器,以及列表推导式的高效编程秘诀!你将学会字典的增删改查全攻略,包括keys()、values()、items()等关键方法的使用技巧;掌握集合的快速成员检测和唯一性特性,避免数据重复的烦恼;更有多层循环的列表推导式让你用一行代码完成复杂任务。无论你是想提升编程效率,还是准备技术面试,这些内容都是你在Python进阶路上必须征服的制胜法宝!

海市公约的博客 1102

Python(列表推导式、元组推导式、字典推导式和集合推导式)

推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此推导式又可细分为列表推导式、元组推导式、字典推导式以及集合推导式。 Python列表推导式 列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。 列表推导式的语法格式如下: variable = [out_exp for out...

今天写多少 2551

python列表、元组、字典、集合总结

python列表: 列表、元组、字典分别对应list, tuple, dict 1.list的简介 列表是python内置的一种数据类型,是一种有序的集合,可对其进行增删改查。列表中的元素不一定是同类型的。列表是可变序列 2.list的初始化 list = [] # 空列表初始化 list = ['a', 'b', 'c'] # 有值初始化 list = [1, 2, 3, 'a', 'b'...

Medlen 3423

Python数据序列全解析:列表、元组、字典、集合及推导式

本文详细讲解了Python四大核心数据结构:列表(灵活有序可变序列)、元组(有序不可变序列)、字典(键值对映射)和集合(无序不重复)。重点介绍了每种数据结构的特点、操作方法及应用场景,包括列表的增删改查、元组的不可变性、字典的键值操作以及集合的数学运算。特别讲解了高效的列表推导式用法,并提供了学生成绩管理系统和数据分析工具两个实战案例。还总结了不同类型数据结构的适用场景选择指南,帮助开发者根据实际需求选择最合适的数据容器。

大家好,我是张小白! 1409

列表推导式、元组推导式、字典推导式和集合推导式详解

推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典以及集合类型的数据,因此推导式又可细分为列表推导式、元组推导式、字典推导式以及集合推导式。 Python列表推导式 列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。 列表推导式的语法格式如下: [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ] 此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。 通过列表推导式的语法

tecoes的博客 3143
上一篇: 第4.3节 Python中与迭代相关的函数
下一篇: 第4.5节 缩进、注释、文档字符串及标识符
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值