时间:2021-05-22
首先来看一下代码:
chars = "abcd"tmp = []for char in chars: tmp.append(ord(char))print(tmp)这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。
利用列表推导的方式:
tmp = [ord(char) for char in chars]输出:[97,98,99,100]
列表推导中也可以使用if和else。
当只有一个if时:
chars = "abcd"tmp = [ord(char) for char in chars if ord(char)>=98]print(tmp)输出:['b','c','d']
额外提一下,当然我们也可以利用filter和map达到相同的效果:
tmp = list(filter(lambda x:x>=98,map(ord,chars)))这句话的意思是,使用map对chars中的每一个字符利用ord函数进行处理。再使用filter对这每一个字符的ASCII码进行过滤大于等于98的,最后将这些符合条件的值存进一个列表中。lambda x:x>98是一个匿名函数。
有一个if else时:
chars = "abcd"tmp = [True if ord(char)>=98 else False for char in chars]print(tmp)输出:[False, True, True, True]
一般而言,列表推导应尽量保持简短。
再看下一个例子:利用列表推导计算笛卡儿积(以衣服的颜色和尺寸为例)
colors = ["black","white"]sizes = ["S","M","L"]tshirts = [(color,size) for color in colors for size in sizes]print(tshirts)生成器表达式可以用于生成其它数据类型的序列,虽然列表推导也可以初始化元祖、数组和其它类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵从迭代器协议,可以逐个产生元素,而不是先建立一个完整的列表。
生成器表达式语法和列表差不多,只不过把方括号变成圆括号。
用生成器表达式生成元组和数组例子:
chars = "abcd"tmp = tuple(ord(char) for char in chars)print(tmp)输出:(97, 98, 99, 100)
import arraychars = "abcd"a = array.array("I",(ord(char) for char in chars))print(a)输出:array('I', [97, 98, 99, 100])
array的构造方法须提供两个参数,第一个是数组中元素的存储方式。如果生成器表达式是唯一的参数,就不用括号括起来,这里不是唯一的,因此要用括号括起来。
colors = ["black","white"]sizes = ["S","M","L"]for tshirt in ("%s %s" % (c,s) for c in colors for s in sizes): print(tshirt)输出:
black S
black M
black L
white S
white M
white L
以上就是本次介绍的全部相关知识点,感谢大家的学习和对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、Python生成器表达式1)、Python生成器表达式语法格式:(exprforiter_variniterable)(exprforiter_varini
本文实例讲述了Python列表推导式与生成器表达式用法。分享给大家供大家参考,具体如下:和列表一样,列表推导式也采用方括号[]表示,并且用到了一个简写版的for
前2种方法主要用到了列表解析,性能稍差,而最后一种使用的时候生成器表达式,相比列表解析,更省内存列表解析和生成器表达式很相似:列表解析[exprforiter_
本文实例讲述了python生成器推导式用法。分享给大家供大家参考,具体如下:1.生成器推导式是继列表推导式后的有一中python推导式,他比列表推导式速度更快,
生成器就是自己用python代码写的迭代器,生成器的本质就是迭代器。通过以下两种方式构建一个生成器:1、通过生成器函数2、生成器表达式生成器函数:函数deffu