推导式comprehensions(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。具有使用方便,让代码看起来很高级的功能。
分析
考虑以下需求:
a=[1,2,3,'a','b','c']
要取出列表中的数字,然后平方,得到一个新的列表。
一般可以这样解决:
a=[1,2,3,'a','b','c']
b=[]
for i in a:
# isinstance(a,type) 判断a的类型是不是type
if(isinstance(i,int)):
b.append(i**2)
print(b)
如果使用列表推导式,会简洁很多:
a=[1,2,3,'a','b','c']
b=[i**2 for i in a if isinstance(i,int)]
print(b)
列表表达式由四个部分组成:输入的列表
列表循环变量
可选的约束条件
输出表达式
例子计算x的平方
#0-9
x = list(range(10))
print(x)
y = [i**2 for i in x]
print(y)
实现嵌套列表的平铺
vec = [[1,2,3],[4,5,6],[7,8,9]]
print(vec)
y = [j for i in vec for j in i]
print(y)过滤不符合条件的元素
a = [1,2,3,0,-1,-3,-100,100]
print(a)
b = [i for i in a if i > 0]
print(b)多序列任意组合
a = [1,2,3,4,5,6,7]
b = [1,2,3,4,7,7,7]
c = [(x,y) for x in a for y in b if(x==y)]
d = [(a[x],b[y]) for x in range(7) for y in range(7) if a[x]==b[y]and(x==y)]
print(c)
print(d)矩阵按列读取
a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[row[i] for row in a] for i in range(3)]
print(b)生成100以内的素数
import numpy as np
a = [x for x in range(2,101) if 0 not in [x%i for i in range(2,int(np.sqrt(x)))] ]
print(a)