Python 如何使用timeit比较dict查找和set查找
我真的不明白Python 如何使用timeit比较dict查找和set查找,python,timeit,Python,Timeit,我真的不明白 import timeit d = {'a':0, 'b':0, 'c':0} s = {'a','b','c'} t = timeit.Timer('a' in (d)) t.timeit() dict key lookup和set membership lookup一样快吗?让我们使用一个灵活的协议:使用(固定的)随机值创建一个包含20000个成员的大字典(如果某些值重复,可能会少于20000个),从key创建一个集合,然后在中测试这两个值的 impor
import timeit
d = {'a':0,
'b':0,
'c':0}
s = {'a','b','c'}
t = timeit.Timer('a' in (d))
t.timeit()
dict key lookup和set membership lookup一样快吗?让我们使用一个灵活的协议:使用(固定的)随机值创建一个包含20000个成员的大字典(如果某些值重复,可能会少于20000个),从key创建一个集合,然后在中测试这两个值的
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的设计速度比sets快,没有人会使用sets…那代码没有任何意义<(d)
中的code>'a'只计算为True
,因此这是将True
传递给timeit.Timer
。我尝试在其中输入'if'和'print',但不起作用尝试timeit.timeit(stmt=“'a'in d”,setup=“d={'a':0',b':0',c':0};s=set(d)”
并将d切换为s。有一点不同,是的。顺便问一下,你的问题到底是什么?您不能使用timeit
?或者你想知道哪个更快?set或dict查找?