列表推导式

循环生成列表

values = [10, 21, 4, 7, 12]
squares = []
for x in values:
    squares.append(x**2)
print squares

[100, 441, 16, 49, 144]
列表推导式可以使用更简单的方法来创建这个列表:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values]
print(squares)

[100, 441, 16, 49, 144]
还可以在列表推导式中加入条件进行筛选。

例如在上面的例子中,假如只想保留列表中不大于10的数的平方:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values if x <= 10]
print(squares)

[100, 16, 49]
也可以使用推导式生成集合和字典:

square_set = {x**2 for x in values if x <= 10}
print(square_set)
square_dict = {x: x**2 for x in values if x <= 10}
print(square_dict)

set([16, 49, 100])
{10: 100, 4: 16, 7: 49}

再如,计算上面例子中生成的列表中所有元素的和:

total = sum([x**2 for x in values if x <= 10])
print(total)

165
但是,Python会生成这个列表,然后在将它放到垃圾回收机制中(因为没有变量指向它),这毫无疑问是种浪费。
为了解决这种问题,Python使用产生式表达式来解决这个问题:

total = sum(x**2 for x in values if x <= 10)
print(total)

165
与上面相比,只是去掉了括号,但这里并不会一次性的生成这个列表。
比较一下两者的用时:

x = range(1000000)
%timeit total = sum([i**2 for i in x])

1 loops, best of 3: 3.86 s per loop

%timeit total = sum(i**2 for i in x)

1 loops, best of 3: 2.58 s per loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值