python列表推导和生成器表达式知识点总结
首先来看一下代码:
chars="abcd" tmp=[] forcharinchars: tmp.append(ord(char)) print(tmp)
这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。
利用列表推导的方式:
tmp=[ord(char)forcharinchars]
输出:[97,98,99,100]
列表推导中也可以使用if和else。
当只有一个if时:
chars="abcd" tmp=[ord(char)forcharincharsiford(char)>=98] print(tmp)
输出:['b','c','d']
额外提一下,当然我们也可以利用filter和map达到相同的效果:
tmp=list(filter(lambdax:x>=98,map(ord,chars)))
这句话的意思是,使用map对chars中的每一个字符利用ord函数进行处理。再使用filter对这每一个字符的ASCII码进行过滤大于等于98的,最后将这些符合条件的值存进一个列表中。lambdax:x>98是一个匿名函数。
有一个ifelse时:
chars="abcd" tmp=[Trueiford(char)>=98elseFalseforcharinchars] print(tmp)
输出:[False,True,True,True]
一般而言,列表推导应尽量保持简短。
再看下一个例子:利用列表推导计算笛卡儿积(以衣服的颜色和尺寸为例)
colors=["black","white"] sizes=["S","M","L"] tshirts=[(color,size)forcolorincolorsforsizeinsizes] print(tshirts)
生成器表达式可以用于生成其它数据类型的序列,虽然列表推导也可以初始化元祖、数组和其它类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵从迭代器协议,可以逐个产生元素,而不是先建立一个完整的列表。
生成器表达式语法和列表差不多,只不过把方括号变成圆括号。
用生成器表达式生成元组和数组例子:
chars="abcd" tmp=tuple(ord(char)forcharinchars) print(tmp)
输出:(97,98,99,100)
importarray chars="abcd" a=array.array("I",(ord(char)forcharinchars)) print(a)
输出:array('I',[97,98,99,100])
array的构造方法须提供两个参数,第一个是数组中元素的存储方式。如果生成器表达式是唯一的参数,就不用括号括起来,这里不是唯一的,因此要用括号括起来。
colors=["black","white"] sizes=["S","M","L"] fortshirtin("%s%s"%(c,s)forcincolorsforsinsizes): print(tshirt)
输出:
blackS
blackM
blackL
whiteS
whiteM
whiteL
以上就是本次介绍的全部相关知识点,感谢大家的学习和对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。