为什么第二个元组的总和在dict列表中最快?

直觉上,当我想要得到一个元组的第二要素的sum在列表中,我只是用一个列表理解:为什么第二个元组的总和在dict列表中最快?

elements = [(1,2), (3,50), (4, 5000)] 

sumOfSecondItems = [x[1] for x in elements]

不过,我发现有很多的解决方案上SO Post。在许多方法下,创建一个字典并总结它的值是最快的。

sum(dict.values())怎么比其他方法快?

这里有其他的方法与它的基准:信贷到原来的author

setup = 'elements = [(1,i) for i in range(100000)];from operator import itemgetter' 

method1 = 'sum([x[1] for x in elements])'

method2 = 'sum(map(itemgetter(1), elements))'

method3 = 'sum(dict(elements).values())'

method4 = 'sum(zip(*elements)[1])'

import timeit

t = timeit.Timer(method1, setup)

print('{0:<40}{1:<30}'.format("list Comprehension: ",t.timeit(100)))

t = timeit.Timer(method2, setup)

print('{0:<40}{1:<30}'.format("map: ",t.timeit(100)))

t = timeit.Timer(method3, setup)

print('{0:<40}{1:<30}'.format("dict: ",t.timeit(100)))

t = timeit.Timer(method4, setup)

print('{0:<40}{1:<30}'.format("zip: ",t.timeit(100)))

结果:

list Comprehension:      0.461558960271     

map: 0.539129069451

dict: 0.198271294849

zip: 1.02714035879

回答:

你时刻码没有比较相同事情;与代码:

elements = [(1,i) for i in range(100000)] 

所有对将具有1作为第一元件,这意味着dict(elements)将只包含一个元素。

print(dict([(1,2),(1,3)])) # --> displays {1:3} 

以上是 为什么第二个元组的总和在dict列表中最快? 的全部内容, 来源链接: utcz.com/qa/259900.html

回到顶部