字典速度更快,但只有稍微的优势:
import timeit
setup = """
x = range(10000)
s = set(range(5000))
d = dict.fromkeys(range(5000))
"""
print '# set', timeit.timeit('for i in x: z = i in s', setup, number=1000)
print '# dic', timeit.timeit('for i in x: z = i in d', setup, number=1000)
然而,除非性能绝对关键,否则出于可读性的考虑,您应该使用集合。
当然,正如您的问题所暗示的那样,我们正在谈论可哈希类型。不可哈希类型(例如容器)将需要其他技术。
为了完整起见,这里是不同修改方法的基准测试:
import timeit
setup = """
x = range(10000)
s = set(range(5000))
d = dict.fromkeys(range(5000))
add_method = s.add
"""
print '# set-add ', timeit.timeit('for i in x: s.add(i)', setup, number=1000)
print '# set-closure ', timeit.timeit('for i in x: add_method(i)', setup, number=1000)
print '# dict [] ', timeit.timeit('for i in x: d[i]=None', setup, number=1000)
print '# d.setdefault', timeit.timeit('for i in x: d.setdefault(i)', setup, number=1000)
dict[i]
是最快的,但这次并不奇怪,因为没有涉及到函数调用。