如何使用timeit来比较dict查找和设置查找

时间:2017-05-18 16:55:30

标签: python timeit

我真的不明白这个

import timeit
d = {'a':0,
     'b':0,
     'c':0}
s = {'a','b','c'}

t = timeit.Timer('a' in (d))
t.timeit()

是否像设置成员资格查找一样快地进行dict键查找?

1 个答案:

答案 0 :(得分:2)

让我们使用一个灵活的协议:使用(固定)随机值创建一个包含20000个成员的大字典(如果重复某些值,则可能少于20000个值),从键创建一个集合,并测试两者都是in

import timeit

for i in ['the_dict','the_set']:
    print("{} {}".format(i,timeit.timeit(stmt="'a' in "+i,setup="import random; random.seed(0); the_dict = {random.randint(0,100000000):0 for _ in range(20000)}; the_set = set(the_dict)")))

我不会匆匆得出结论:对于两个不同的运行:

>>> 
the_dict 0.04250915015789406
the_set 0.03894365848696617
>>> 
*** Console de processus distant Réinitialisée *** 
>>> 
the_dict 0.03786818274290301
the_set 0.04610909810692078
>>> 

此时的时间差异可能是非常低级别(缓存命中/未命中),与python无关。两者都使用散列。如果dict在设计上比set更快,那么没有人会使用set ...