列表解析:
此为高端用法, 与lambda表达式同为函数式编程
其为根据已有列表,高效创建新列表的方式
列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中
语法:
[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]
- 第一种语法是标准的遍历语法
- 第二种后头的if用于过滤
详细用例可参考这里:
https://www.cnblogs.com/liu-shuai/p/6098227.html
由各个用例&语法可以看出, 列表解析是for创建list的一种替代方案, 并且其速度相比于for可以快进一倍, 有点类似于正则表达式对于字符串的作用
例子:
length = 3
vec1 = [a for a in range(length)]
vec2 = [chr(ord("a")+a) for a in range(length)]
ans1= [(a,b) for a in vec1 for b in vec2]
print(ans1)
输出:
[(0, 'a'), (0, 'b'), (0, 'c'), (1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]
基本思想就是把原先放在for中的expression丢到前头去
嵌套列表解析:
这里就相当于for的嵌套, 一个道理
例子:
length = 3
vec1 = [[now+row for now in range(length) ] for row in range(0, length*length, length)]
print(vec1)
输出:
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]