1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python进阶3——列表解析式和生成器表达式

Python进阶3——列表解析式和生成器表达式

时间:2020-02-22 17:45:20

相关推荐

Python进阶3——列表解析式和生成器表达式

列表解析式相比循环更加简介易读

abc='abcdef'codes1=[]for code in abc:codes1.append(ord(code))#返回字符对应的十进制数。codes2=[ord(code) for code in abc]print(codes1)print(codes2)

同样的结果,循环三行代码,而列表解析式只需要一行,更加简洁易读

在某些情况,用filter和map生成的列表,用列表解析式的话会更加简洁

codes3=[ord(code) for code in abc if ord(code)>100]codes4=list(filter(lambda c:c>100, map(ord, abc)))print(codes3)print(codes4)

列表生成式比filter和map的组合可读性更强

filter函数的第一个参数是函数对象,函数对象可以是lambda表达式,也可以是函数名,作用是根据函数对象,对序列进行过滤

map函数的第一个参数也是函数对象,作用是根据函数对象对序列进行映射

上述代码先通过map函数将abc中的每个字符映射为十进制数,然后通过lambda表达式过滤出大于100的十进制数,最后放入一个列表中

通过列表解析式组合衣服的尺码和颜色

colors=['black','white','red','yellow']sizes=['s', 'm', 'l']clothes1=[(color, size) for color in colors for size in sizes]clothes2=[(color, size) for size in sizes for color in colors]print(clothes1)print(clothes2)

上述两个clothes列表的个数相同,但是生成过程不同,clothes1先取得每个颜色,然后匹配每个颜色对应的size,clothes2先取得每个size,然后匹配每个size对应的颜色

上述两个列表的差别在于for循环的顺序不同

生成器表达式和列表解析式类似,只不过列表解析式的结果是用中括号,而生成器表达式的结果是小括号

codes5=(ord(code) for code in abc)codes6=tuple(ord(code) for code in abc)codes7=list(ord(code) for code in abc)print(codes5)print(codes6,'\n', codes7)

生成器表达式只返回一个迭代器,如果需要显示迭代器的内容,需要将迭代器传入list函数or tuple函数

生成器表达式执行时,会把元素逐个生成,而不会向列表解析式那样一次生成所有元素,这样不仅省内存(因为不会生成所有元素),也省了for循环时间(遍历生成时间)

通过生成器表达式组合衣服的尺码和颜色

colors=['black','white','red','yellow']sizes=['s', 'm', 'l']for clothes in ((size, color) for size in sizes for color in colors):print(clothes)

可见,每个clothes都是一个元组

参考:

《流畅的Python》

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。