当前位置: 首页 > 图灵资讯 > 行业资讯> 一文读懂列表解析、字典解析、集合解析

一文读懂列表解析、字典解析、集合解析

发布时间:2025-09-30 17:26:46

第一,所谓的分析/分析,也叫推导/推导,对应的英语单词是comprehension,是Python的一个独特特征。分析是从一个数据序列构建另一个新的数据序列结构。其本质是使用可迭代对象,按照一定的规则通过表达式和函数操作获得新的迭代对象。列表分析获得列表对象,字典分析获得字典,集合分析获得集合。

二、语法解释

1.列表分析:通过分析表达式从可迭代对象生成新列表

[exprforiter_variniterable]
[exprforiter_variniterableifcond_expr]

其中:

句子中的中括号表示返回数据转换为列表。

expr是计算新列表元素值的表达式

iter_var:表示运算表达式处理对象所在的容器分析是将可迭代对象iter_var中的每个元素表达式操作后获得的值作为新列表的元素过程;

if cond_exp:在参与表达式运算之前,可迭代对象中的元素需要满足指定条件。如果需要多个条件,可以在if表达式之后叠加一个if表达式。例如:

l=[chr(i+ord('A'))foriinrange(26)ifi%2=0ifi%3=0ifi%4=0]#结果为:['A','M','Y']

以上例子:

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

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

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

上述列表分析的句子表示:使用for访问range对象的每个元素i,当元素i可以删除2时、3、4.当它可以被12排除时,它会生成一个值为'的字母;A'根据上述逻辑,ASCII值加I值为0、12、 满足要求时,相应的字母是结果列表中的元素。

2.集合分析:通过分析表达式从可迭代对象生成新的集合

{exprforiter_variniterable}
{exprforiter_variniterableifcond_expr}

集合分析和列表分析的区别在于用大括号代替列表分析的中括号,从而决定返回值是一个集合,其他的没有区别。

注:集合会很重,如果有重复值,只保留一个。

3.字典分析:通过分析表达式从可迭代对象生成新字典

{key_expr:value_exprforiter_variniterable}
{key_expr:value_exprforiter_variniterableifcond_expr}

字典分析也使用大括号,但键和值的计算表达式必须同时指定在句子中,以确保生成的元素是使用冒号分离的键-值对,其他元素类似于集合分析。键的计算表达式是key_expr,value_expr。

注:字典的键必须是唯一的,如果键在计算元素时重叠,如果有重复值,则只保留一个。

例如:用数字列表生成字典数据的数字和字母(计算方法参考上述例子)

d={i:chr(ord('a')+i)foriin[1,1,2,3]}#结果d值为:{1:'b',2:'c',3:'d'}
d={i:chr(ord('a')+i+index)forindex,iinenumerate(1,1,2,3)

#结果d值为:{1: 'c', 2: 'e', 3: 'g'},请参考上一节的介绍enumerate函数

从上面的例子可以看出,重复键1只保留了一个字典元素,保留了与键最后一个值对应的键-值对。

第三,补充说明

1.生成器分析已在生成器一节介绍,生成器分析实际上是生成器表达式,这里就不赘述了;

2.在前面的介绍中没有提到元组分析。同时,当句子外面有一个小括号时,它实际上对应于生成器而不是元组。因此,Python没有元组分析的概念。如果需要通过分析获得元组,可以通过列表分析和生成器分析形成列表或生成器,然后通过tuple将其转换为元组;

3.虽然上述分析方法也可以通过句子循环赋值来实现,但使用分析方法更简洁、更快地运行;

4.分析不会改变参数中原始迭代对象的值;

5.在分析中使用多个for语句等同于多个for循环。例如,以下代码实现了两个列表生成第三个列表的笛卡尔积,其元素是前两个列表:

numb=[iforiinrange(2)]
abc=[chr(ord('a')+k)?forkinrange(2)]
d=[(a,n)forainabcforninnumb]

#结果为:

[('a',0),('a',1),('b',0),('b',1)]

相关文章

一文读懂列表解析、字典解析、集合解析

一文读懂列表解析、字典解析、集合解析

2025-09-30
多种方法合并Python中的两个列表、字典

多种方法合并Python中的两个列表、字典

2025-09-30
Python判断列表里是否有重复元素的三种方法

Python判断列表里是否有重复元素的三种方法

2025-09-30
细说python3中sort和sorted

细说python3中sort和sorted

2025-09-30
详说Python风格的函数分配参数

详说Python风格的函数分配参数

2025-09-30
超详细的Python中与迭代相关的函数

超详细的Python中与迭代相关的函数

2025-09-30