简介:
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。
例如:
[x for x in range(1, 11) if x % 2 == 0]
# result: [2, 4, 6, 8, 10]
执行顺序则为:
for x in range(1, 11)
if x % 2 == 0
x
使用场景:
1.除了上述例子外,x可以是一个表达式:
# 返回1-100之间偶数的平方作为一个列表
>>> [x*x for x in range(1,100) if x % 2 == 0]
result:
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400, 484, 576, 676, 784, 900, 1024, 1156, 1296, 1444, 1600, 1764, 1936, 2116, 2304, 2500, 2704, 2916, 3136, 3364, 3600, 3844, 4096, 4356, 4624, 4900, 5184, 5476, 5776, 6084, 6400, 6724, 7056, 7396, 7744, 8100, 8464, 8836, 9216, 9604]
其中x*x作为一个表达式在此。仅仅是想说明使用自由!
2.可以有两个(多个)for循环及两个(多个)变量
# x在取值范围内与y的值两两组合,返回一个以列表为元素的列表
>>> [[x,y] for x in range(1, 3) for y in range(4, 6)]
result: [[1, 4], [1, 5], [2, 4], [2, 5]]
过程:
- x为1时,y第一次取4,组合为[1, 4]列表append到总列表中
- x=1,y=5;组合为[1, 5],append到[1,4]之后
- 以此类推
3.加工函数
>>> [[str(x),x*x] for x in range(1,10) if x % 2 == 0]
[['2', 4], ['4', 16], ['6', 36], ['8', 64]]
4.嵌套遍历双重结构
>>> list = [[1,2,3], [4,5,6], [7,8,9]]
>>> [x for y in list for x in y]
[1, 2, 3, 4, 5, 6, 7, 8, 9]