在生成具有某些特征的数据的列表时,如果用之前介绍的方法,会很繁琐。
一个优雅美丽的方法是列表生成式(List Comprehensions)。
举个栗子:
a=[1,2,3,4,5,6,7,8,9,10]
b=[x for x in a if x%2==0]
b
[2,4,6,8]
c=[x*x for x in a]
c
[1,2,9,16,25,36,49,64,81,100]
还可以使用两层或以上循环:
A,B,C的全排列
a=[x+y+z for x in 'ABC' for y in 'ABC' for z in 'ABC' if x!=y and x!=z and y!=z]
a
['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
列表生成式不仅适用与列表,还可以用来生成字典或集合。
total = sum([x**2 for x in values if x <= 10])
这个例子中,Python会生成这个列表,然后在将它放到垃圾回收机制中(因为没有变量指向它),这毫无疑问是种浪费。
因此,可以使用产生式表达式来解决这个问题:
total = sum(x**2 for x in values if x <= 10)
两者的效果一样,但是后者更加高效。