将集合(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

结论:列表推导式的效率更高

猜你喜欢

转载自blog.csdn.net/AlanGuoo/article/details/80883279