先定义一个列表a
a = [1, 2, 3, 4, 5, 6, 7, 8]
a = [1, 2, 3, 4, 5, 6, 7, 8]
# 列表推导
d = [i**2 for i in a]
#集合推导
e = {i**2 for i in a}
#元组推导
f = (i**2 for i in a)
print(type(d))
print(type(e))
print(type(f))
-------------------------
输出:
<class 'list'>
<class 'set'>
<class 'generator'>
前两个是列表和集合,这很正常,最后一个用的元组,却是
生成器(Generator)
,这是因为元组是不可变的。
要怎么访问里面的元素呢?很简单:
a = [1, 2, 3, 4, 5, 6, 7, 8]
f = (i**2 for i in a)
for n in f:
print(n)
print(type(f))
---------------------------------------------
输出:
1
4
9
16
25
36
49
64
<class 'generator'>
推导式还可以进行条件判断:(当a
中的元素大于等于5
时候才计算)
a = [1, 2, 3, 4, 5, 6, 7, 8]
d = [i**2 for i in a if i >=5]
print(d)
---------------------
输出:
[25, 36, 49, 64]
推导式第一个
i**2
,i
的平方还可以用函数替代。(小提示:i
的立方可以写成i***3
)。当列表a
中的元素大于等于6
的时候,计算它的平方,否则计算它的立方:
a = [1, 2, 3, 4, 5, 6, 7, 8]
def conpute(x):
if(x >= 6):
return x**2
return x**3
f = [conpute(i) for i in a]
print(f)
----------------------------------------
输出:
[1, 8, 27, 64, 125, 36, 49, 64]
将数字或者字符串放进列表中:
a = [1, 2, 3, 4, 5, 6, 7, 8]
def conpute(x):
if(x >= 6):
return x**2
return x**3
d = (conpute(i) for i in a)
x = []
for n in d:
x.append(n)
print(x)
---------------------------------------------------
输出:
[1, 8, 27, 64, 125, 36, 49, 64]