Python提供了一种精简的方法,可以根据一份列表来生成另外一份列表,即为列表推导。
实例1:生成每个元素的平方
- 列表推导形式:
a = [1,2,3,4,5,6,7]
squares = [x**2 for x in a]
print(squares)
- 通常的
map
写法需要创建lambda
函数,如下:
a = [1,2,3,4,5,6,7]
squares = map(lambda x:x**2,a)
print(squares)
实例2:计算列表中偶数的平方
- 列表推导形式:
even_squares = [x**2 for x in a if x % 2==0]
print(even_squares)
map
和filter
函数:
alt = map(lambda x:x**2,filter(lambda x:x%2==0,a))
字典(
dict
)和集合(set
)也有同样的列表推导形式
chile_ranks = {'ghost':1,'habanero':2,'cayenne':3}
rank_dict = {rank:name for name,rank in chile_ranks,items()}
print(rank_dict)
最后指出,列表推导支持多层嵌套
,但是多层嵌套
难以理解,因此不要使用含有两个以上表达式的列表推导。
实例3:将矩阵元素拉平(两层嵌套)
matrix = [[1,2,3],[4,5,6],[7,8,9]]
flat = [x for row in matrix for x in row]
#每个元素取平方
squared = [[x**2 for x in row] for row in matrix]
print(flat)
print(squared)