国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > 一文读懂列表解析、字典解析、集合解析

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

头像

silencement

2019-07-10 11:10:343713浏览 · 0收藏 · 0评论

一、所谓解析/解析式,也称为推导/推导式,对应英语单词为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)]
关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

老汉猛躁女人XXXXX88AV | 保姆的特殊待遇5| 国产精品久久久久久精品| 《性爽2》电影| 无人区免费高清版观看| 舌头伸进去添的我爽高潮| 真实双人插画的视频| H漫画| 太粗大深好疼快拔出去| 动漫| 涂了春药的奶头被众人抡H漫画| 办公室狂C小雪秘书好爽H| 欧美大片视频| 他的大手在秘密花园游走漫画| 老卫抱着淑蓉进房间导演是谁| WWW.XIXIXJ48.GO..| 初尝少妇王老师的第一次在线观看| 草原课文六年级上册| 白色变态蕾丝超薄开档连身袜| 三男一女吃奶添下面| 春闺艳妇(古言)作者:年富一年| 一家乱战60集全播放免费观看| 琪琪热码在线中文字幕| 扌击辶鬲的小说父女| 无套内谢A片毛片免费| 男人把困困进女生困困视频| 《厨房激战5》完整版在线观看| 《漂亮的秘书HD》在线观看| 叶美香电影| 在线视频| 泰国电影《初次深交流》| 小雪被体育老师抱到仓库| 吃春晚药后妈妈疯了怎么对付 | 女人大阴屑夹缝是阴虚还是阳虚| 年轻的嫂子2| 《性房纵欲》在线观看| 退休后日大女儿的隐喻和含义| 黑料不打烊吃瓜爆料黑料| 双面玛莎| 人犬兽人高清版在线观看| 美女和帅哥一起努力生产豆浆的视..