推导或内涵
Posted 玩蛇者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推导或内涵相关的知识,希望对你有一定的参考价值。
指以紧凑的方式对列表,元组,字典等序列或一序列的元素进行处理,处理的结果仍然放到一个列表,字典等序列之中的语法形式:
典型列表推导形式:
[<i 相关表达式> for i in aiterator]
aiterator是指一个可遍历的对象,比如:列表,元组,也可以是range()函数。
其语义是:用循环变量i去遍历aiterator,并且将i相关表达式的值放入一个列表中。
每当对列表,元组,字典序列中的元素进行处理时,可以用推导来完成。可以降低程序的复杂性。使程序清晰易懂,缩短程序的长度。
比如获得1-10的平方数存入列表之中,使用列表只需一行代码。如下:
square=[i**i for i in range(1,11)]
如果不用推导,用for语句代码:
square=[]
for i in range(1,11)
square.append(i**i)
字典实现推导语法如下:
{key:value for key,value in aiterator}
key=[‘name‘,‘age‘,‘xingbie‘]
values=[‘lhl‘,‘18‘,‘nan‘]
adct={k:v for k,v in zip(key,values)} #字典推导中使用了并行迭代zip
结果:{‘name‘:‘lhl‘,‘age‘:‘18‘,‘xingbie‘:‘nan‘}
列表推导和字典推导不仅可以对遍历的元素进行全部处理,还可以使用if语句实现由选择性的处理遍历序列中的元素,格式如下:
[<i 相关表达式> for i in aiterator if <条件>]
{k:v for k,v in aiterate if <条件>}
如果获得1-10中所有书的平方,且平方值为偶数的一个列表,代码如下:
square=[i**i for i in range(1,11) if i**i %2==1]
对于字典推导式也可以使用if来进行部分元素的处理
如果在推导式中的求值表达式或条件表达式中应用函数,则可以构造更加复杂的推导式来实现对序列中的数据进行批量的处理(这也常被称为声明式编程)
以上是关于推导或内涵的主要内容,如果未能解决你的问题,请参考以下文章