如何使用timeit比较dict lookup和set lookup
How to use timeit to compare dict lookup and set lookup
这个我真的不懂
import timeit
d = {'a':0,
'b':0,
'c':0}
s = {'a','b','c'}
t = timeit.Timer('a' in (d))
t.timeit()
字典键查找与集合成员查找一样快吗?
让我们使用一个灵活的协议:使用(固定的)随机值创建一个包含 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)")))
虽然我不会仓促下结论:对于 2 次不同的运行:
>>>
the_dict 0.04250915015789406
the_set 0.03894365848696617
>>>
*** Console de processus distant Réinitialisée ***
>>>
the_dict 0.03786818274290301
the_set 0.04610909810692078
>>>
此时的时间差异可能是非常低级的(缓存hit/miss),与python无关。两者都使用哈希。如果 dict 设计得比 sets 快,就没有人会使用 sets...
这个我真的不懂
import timeit
d = {'a':0,
'b':0,
'c':0}
s = {'a','b','c'}
t = timeit.Timer('a' in (d))
t.timeit()
字典键查找与集合成员查找一样快吗?
让我们使用一个灵活的协议:使用(固定的)随机值创建一个包含 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)")))
虽然我不会仓促下结论:对于 2 次不同的运行:
>>>
the_dict 0.04250915015789406
the_set 0.03894365848696617
>>>
*** Console de processus distant Réinitialisée ***
>>>
the_dict 0.03786818274290301
the_set 0.04610909810692078
>>>
此时的时间差异可能是非常低级的(缓存hit/miss),与python无关。两者都使用哈希。如果 dict 设计得比 sets 快,就没有人会使用 sets...