列表推导式(list comprehension) 也称为列表解析式。
-
使用简洁的方式对列表或者可迭代的对象进行遍历、过滤、计算等
-
表达式 [expression for exper1 in seq if condition1
for exper2 in seq2 if condition2]
嵌套多层的表达式:外层在左边,内层在右的原则。外层的元素作为内层的序列来使用 -
逻辑上等价于for循环,但是更加简单
-
示例: alist = [x*x for x in range(10)]由0-9 的平方组成的列表
相当于:
alist = []
for x in range(10):
alist.append(x*x)
如果使用函数:等价于
alist = list(map(lambda x: x*x,range(10)))
alist2 = list(map(lambda x:pow(x,2),range(10)))
- 嵌套列表的平铺
vc = [[10,2],[23,34,2],[1,2,3,4,5]]
vc1 = [x for num in vc for x in num ]
print(vc1)
#[10, 2, 23, 34, 2, 1, 2, 3, 4, 5]
#等价于:
vc2 = []
for num in vc:
for x in num:
vc2.append(x)
print(vc2)
- 过滤条件的使用 在对应的for in 之后添加if 条件
ll = [[1,2,3,4],[4,5,6,7,8],[5,8,9,10],6]
#每经过一次for遍历进行一次筛选
#第一个筛选是否是列表,第二次筛选值师傅哦在[3,8)区间内
ls = [x for item in ll if isinstance(item,list) for x in item if x>=3 and x<8]
print(ls)
#最后的结果中,可以是任何多层遍历项的组合
ls1 = [(item,x) for item in ll if isinstance(item,list) for x in item if x>=3 and x<8]
print(ls1)
#[3, 4, 4, 5, 6, 7, 5]
#[([1, 2, 3, 4], 3), ([1, 2, 3, 4], 4), ([4, 5, 6, 7, 8], 4), ([4, 5, 6, 7, 8], 5), ([4, 5, 6, 7, 8], 6), ([4, 5, 6, 7, 8], 7), ([5, 8, 9, 10], 5)]
- 同时遍历过个列表或者可迭代对象 此时的多个for语句作为并列的结构而存在。此时如果结果需要组合则是使用的各个for值的笛卡尔积
ll = [(x,y) for x in range(5) for y in range(3)]
print(ll)
#[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2)]