第7条 用列表推导来代替map和filter

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)
  • mapfilter函数:
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值