defaultdict比普通字典慢

2024-09-27 21:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的代码,用普通的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。在

所以我看到的是这种行为,是我在这里遗漏了什么,还是做了错事?在


Tags: textinfromimporthellotimeis例子
1条回答
网友
1楼 · 发布于 2024-09-27 21:33:04

你的测试有缺陷,因为绳子太小了。因此,固定成本可能会超过迭代逻辑的性能。一个很好的提示是,您的计时是以微秒为单位的,对于基准测试来说可以忽略不计。在

这里有一个更合理的测试:

n = 10**5
text = "hello this is python python is a great language, hello again"*n

%timeit defdict()  # 445 ms per loop
%timeit nordict()  # 520 ms per loop

相关问题 更多 >

    热门问题