将集合(list)中的所有元素的某个属性加总,分别测试列表推导式(list comprehension) 与循环(loop)的执行效率

先说明一下需求:

假设有一个集合,集合中有大量元素,这些元素可能是字典(dict),也可能是类(class)的实例(instance),然后我们想对这些元素的某个键值或者是某个属性进行加总。传统做法是对集合进行循环,还有一种更高效的方法则是通过列表推导式实现。


  • 首先定义两个函数
# 循环方法
def loop(l):

    result = 0
    for i in range(0, len(l)):
        result += l[i]['b']
    return result

# 列表推导式方法
def listComprehension(l):

    result = sum([x['b'] for x in l])

    return result
  • 以上两个函数接收一个目标集合(list)),集合里的元素都是字典,且每个字典都有名称为‘b’的键,需要对’b’的键值进行累加求和,接下来生成一个集合,并进行测试
In [2]: testList = [{'a':1, 'b':2, 'c':3, 'd':4}]*1000000

In [3]: %timeit loop(testList)
10 loops, best of 3: 70.1 ms per loop

In [4]: %timeit listComprehension(testList)
10 loops, best of 3: 56.9 ms per loop

In [5]: testList = [{'a':1, 'b':2, 'c':3, 'd':4}]*10000000

In [6]: %timeit loop(testList)
1 loop, best of 3: 705 ms per loop

In [7]: %timeit listComprehension(testList)
1 loop, best of 3: 619 ms per loop
结论:列表推导式的效率更高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值