列表推导式
是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表,即循环创建列表.
for可以用来创建列表,列表推导式就相当于是for循环的简化版
1. 最简单的情况
values = [10, 21, 5, 7, 12]
squares = []
for x in values:squares.append(x**2)
print squares
运行结果:
[100, 441, 25, 49, 144]
可以变成
values = [10, 21, 5, 7, 12]
squares=[x**2 for x in values]
运行结果:
[100, 441, 25, 49, 144]
- 假如在上面的例子中, 只想保留其中的一部分,可以变成:
values = [10, 21, 5, 7, 12]
squares=[x**2 for x in values if x<10]
运行结果:
[25, 49]
- 在上面这个例子中,想求生成的列表中所有元素的和
total=sum([x**2 for x in values if x<10])
运行结果:
74
因为里面有个分号,这样会先生成一个列表,然后计算元素的和,最后把这个列表放在垃圾回收机制中(没有变量指向它),这样无疑是种浪费,
如果把中括号去了就可以解决这个问题,而且执行速度也会变快
total=sum(x**2 for x in values if x<10)
运行结果:
74
- 假如想加入多个for循环
list = [(e,f * f) for e in range(3) for f in range(5, 15, 5)]
运行结果:
[(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
- 如果你还想嵌套列表推导式,多个并列条件
list1 = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g !=0]
运行结果:
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]