以下是 Python 2.7 的精确计时结果:
>>> %timeit (3, 8) in d.keys() # Slow, indeed
100000 loops, best of 3: 9.58 us per loop
>>> %timeit 8 in t[3].keys() # Faster
1000000 loops, best of 3: 246 ns per loop
>>> %timeit (3, 8) in d # Even faster!
10000000 loops, best of 3: 117 ns per loop
>>> %timeit 8 in t[3] # Slightly slower
10000000 loops, best of 3: 127 ns per loop
他们表明,标准(3, 8) in d
(no .keys()
列表构建)实际上比(不太通用)快一点8 in t[3]
方法,以及快两倍由于相对较快8 in t[3].keys()
的问题。这.keys
/no .keys
差异来自于这样一个事实:(3, 8) in d.keys()
构建一个键列表(在 Python 2 中),然后查找(3, 8)
在这个列表中,这比查找要慢得多(3, 8)
在字典的哈希表中d
.
正如评论中所述,计时结果与 Python 3 不同:Python 3keys()
有一个快速in
测试因为keys()
相反,返回键的视图,以便in
运算符可以使用对应字典的哈希表。
原始问题中的速度差异来自于以下事实:d.keys()
与相比,建立了一个相对较长的列表t[3].keys()
.
PS: the %timeit
功能由优秀的提供IPython http://ipython.org/壳。原始程序可以通过 IPython 执行%run prog.py
.