今天来聊聊python的列表生成器
最简单的:
[x for x in range(10)]
得到的结果是:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
稍微复杂一点的:
[x for x in ‘abcdefg’]
结果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
没错,这个可以把字符串转成单个字符的列表
msg=’abcdefg’
print([x for x in msg])
结果:
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
总之,这样可以把一个可迭代对象拆开,比如:
这样(字典):
msg={1:’abc’,2:’bbc’}
print([x for x in msg.items()])
结果:
[(1, ‘abc’), (2, ‘bbc’)]
这样(集合):
msg={‘abc’,2}
print([x for x in msg])
结果:
[2, ‘abc’]
还有这样(元组):
msg=(‘abc’,2,3,’4’)
print([x for x in msg])
结果:
[‘abc’, 2, 3, ‘4’]
另外还有操作可以给生成的列表加一些条件:
阿里云代金券1000元免费领取!领取地址:http://aliyun.jinre.com
新老阿里云账户均可领取!可用于购买阿里云服务器ECS、云数据库RDS、虚拟主机、安骑士、DDoS高防IP等100多云计算产品。
代金券自领取之日起,有效期是30天,请及时使用,过30天后还可以重新领取。
msg=(‘abc’,2,3,’4’,’567’)
print([x for x in msg if isinstance(x,int)])
结果:
[2, 3]
或者多重循环的嵌套:
msg1=(‘a’,’b’,’c’)
msg2=(1,2,3)
print([x+str(y) for x in msg1 for y in msg2] )
结果:
[‘a1’, ‘a2’, ‘a3’, ‘b1’, ‘b2’, ‘b3’, ‘c1’, ‘c2’, ‘c3’]
那么我们要知道从三个集合里面取出来的元素所有的组合(注意不是排列)就可以这样:
msg1=(‘a’,’b’,’c’)
msg2=(1,2,3)
msg3=(‘%’,’
′)res=[(x,y,z)forxinmsg1foryinmsg2forzinmsg3]print(res)print(len(res))结果:[(‘a′,1,‘
′
)
r
e
s
=
[
(
x
,
y
,
z
)
f
o
r
x
i
n
m
s
g
1
f
o
r
y
i
n
m
s
g
2
f
o
r
z
i
n
m
s
g
3
]
p
r
i
n
t
(
r
e
s
)
p
r
i
n
t
(
l
e
n
(
r
e
s
)
)
结
果
:
[
(
‘
a
′
,
1
,
‘
'), ('a', 2, '%'), ('a', 2, '
′),(‘a′,3,‘
′
)
,
(
‘
a
′
,
3
,
‘
'), ('b', 1, '%'), ('b', 1, '
′),(‘b′,2,‘
′
)
,
(
‘
b
′
,
2
,
‘
'), ('b', 3, '%'), ('b', 3, '
′),(‘c′,1,‘
′
)
,
(
‘
c
′
,
1
,
‘
'), ('c', 2, '%'), ('c', 2, '
′),(‘c′,3,‘
′
)
,
(
‘
c
′
,
3
,
‘
’)]