Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用timeit比较dict查找和set查找_Python_Timeit - Fatal编程技术网

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查找?