解析的析组词,列表字典集合区别

  解析的析组词,列表字典集合区别

  1.所谓解析/解析公式,也叫推导/推导公式,对应的是英文单词synthesis,这是Python独有的特性。解析是从一个数据序列中构造另一个新的数据序列。其本质是使用一个可迭代的对象,经过表达式、函数等运算后得到一个新的迭代对象。按照一定的规则。list对象通过list解析获得,dictionary通过dictionary解析获得,set通过set解析获得。

  第二,语法解释

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

  [exprforiter _ varinitiable]

  [EXPRITOR _ VARINTERABLEIFCOND _ EXPR]其中:

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

  Expr是一个计算新列表元素值的表达式。

  Iter_var:表示表达式操作处理的对象所在的容器。Resolution是将iterable对象iter_var中的每个元素进行表达式运算后得到的值作为新列表的元素过程;

  If cond_exp:表示iterable对象中的元素需要满足指定的条件才能参与表达式运算。如果需要多个条件,可以在if表达式之后叠加一个if表达式。比如:

  l=[CHR(I ORD( A ))for iinrange(26)IFI % 2==0 ifi % 3==0 ifi % 4==0]#结果为:[A , M , Y]在上面的例子中:

  Ord(c)函数:返回字母c的unicode代码,ASCII字符返回ASCII代码。

  Chr(i)函数:返回unicode代码对应的字符,0=i=0x10ffff,如果I是ASCII代码的范围,则返回ASCII字符。

  Range是上一节介绍的函数。这里,它用于生成一个range对象,该对象遍历0到25的序列。

  上面的列表解析语句表明:使用for来访问range对象的每个元素I。当元素I被2、3、4整除,即被12整除时,就会生成一个字母,这个字母的ASCII码值就是‘a’的ASCII码值加上I的值,按照上面的逻辑,当I为0、12、24时满足要求,对应的字母就是结果列表中的元素。

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

  { exprforiter _ variniterable }

  { exp ritor _ VARINTERABLEIFCOND _ EXPR }集合解析和列表解析的区别在于,列表解析中的括号改为花括号,决定了返回值是集合,其他没什么区别。

  注意:集合将被复制,如果有重复的值,将只保留一个。

  3.字典解析:通过解析表达式从迭代对象生成新的字典。

  { key _ expr : value _ exprforiter _ varinitiable }

  { Key _ expr : value _ EXPRITOR _ VARINTERABLEIFCOND _ EXPR }字典解析也使用大括号,但是必须在语句中指定Key和值的计算表达式,以确保生成的元素是用冒号分隔的键值对。其他类似于集合解析。key的计算表达式是key_expr,value的计算表达式是value_expr。

  注意:字典的键必须是唯一的。如果在计算元素时这些键重合,那么如果出现重复值,将只保留一个键。

  比如用一列数字生成数字和字母的映射关系的字典数据(计算方法参考上例)。

  d={ I : chr(ord( a )I)for iin[1,1,2,3]}?#结果D的值为:{1: b ,2: c , d}

  D={ I : chr(ORD( a )I Index)for Index,IIN枚举([1,1,2,3]))} #结果D的值为:{1: c ,23360 e , g}。

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

  三。补充说明

  1.生成器解析在生成器一节已经介绍过了,其实就是一个生成器表达式,这里就不赘述了;

  2.前面的介绍中没有提到元组解析。同时,在语句外部使用括号时,实际上对应的是一个生成器,而不是一个元组。所以Python没有元组解析的概念。如果需要通过解析得到元组,可以通过列表解析和生成器解析创建一个列表或者一个生成器,然后通过元组方法转换成元组;

  3.虽然上述解析方法也可以通过语句循环赋值来实现,但是解析方法更简单,运行速度更快;

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

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

  number=[iforinrange(2)]

  abc=[chr(ord(a) k)?分叉范围(2)]

  D=[(a,n)forainabcforninnumb]#结果是:

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: