加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python之列表推导和生成器表达式

发布时间:2020-12-20 09:52:16 所属栏目:Python 来源:网络整理
导读:首先来看一下代码: chars = " abcd " tmp = [] for char in chars: tmp.append(ord(char)) print (tmp) 这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。 利用 列表推导的方式 : tmp = [ord(char) in chars] 输出:[97,98,99,

首先来看一下代码:

chars = "abcd"
tmp = []
for char in chars:
    tmp.append(ord(char))
print(tmp)

这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。

利用列表推导的方式

tmp = [ord(char) in chars]

输出:[97,98,99,100]

列表推导中也可以使用if和else。

当只有一个if时:

chars = 
tmp = [ord(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 = 
tmp = [True if ord(char)>=98 else False  chars]
print(tmp)

输出:[False,True,True]

一般而言,列表推导应尽量保持简短。

再看下一个例子:利用列表推导计算笛卡儿积(以衣服的颜色和尺寸为例)

colors = [black",white]
sizes = [SML]
tshirts = [(color,size) for color in colors for size  sizes]
print(tshirts)

生成器表达式可以用于生成其它数据类型的序列,虽然列表推导也可以初始化元祖、数组和其它类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵从迭代器协议,可以逐个产生元素,而不是先建立一个完整的列表。

生成器表达式语法和列表差不多,只不过把方括号变成圆括号

用生成器表达式生成元组和数组例子:

chars = 
tmp = tuple(ord(char)  chars)
print(tmp)

输出:(97,100)

import array
chars = 
a = array.array(I chars))
print(a)

输出:array('I',[97,100])

array的构造方法须提供两个参数,第一个是数组中元素的存储方式。如果生成器表达式是唯一的参数,就不用括号括起来,这里不是唯一的,因此要用括号括起来。

colors = [for tshirt in (%s %s" % (c,s) for c for s  sizes):
    print(tshirt)

输出:

black S
black M
black L
white S
white M
white L

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读