我有一个非常简单的代码,用普通的dictonaries和defaultdict
测试它,令人惊讶的是{
from collections import defaultdict
from timeit import timeit
text = "hello this is python python is a great language, hello again"
d = defaultdict(int)
s = {}
def defdict():
global text, d
for word in text.split():
d[word] += 1
def nordict():
global text, s
for word in text.split():
if word not in s:
s[word] = 1
else:
s[word] += 1
print(timeit(stmt='defdict', setup='from __main__ import defdict', number=3))
print(timeit(stmt='nordict', setup='from __main__ import nordict', number=3))
st = time.time()
defdict()
print(time.time() - st)
st = time.time()
nordict()
print(time.time() - st)
输出
^{pr2}$这是一个非常简单的例子,对于这个特殊的例子,我肯定可以使用Counter
,这是最快的,但是我从整体的角度来看待这个例子,在这种情况下,我们需要做的事情不仅仅是计算一个键的出现次数,而且我们显然不能使用Counter
。在
所以我看到的是这种行为,是我在这里遗漏了什么,还是做了错事?在
你的测试有缺陷,因为绳子太小了。因此,固定成本可能会超过迭代逻辑的性能。一个很好的提示是,您的计时是以微秒为单位的,对于基准测试来说可以忽略不计。在
这里有一个更合理的测试:
相关问题 更多 >
编程相关推荐