, :
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)
However, if performance is not absolutely critical, you should use kits for readability.
Of course, as your question suggests, we are talking about hashing types. Unpacked types, such as containers, will require other methods.
For completeness, here are the standards of various modification methods:
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] is the fastest, but this time it is not surprising because no function call is involved.
georg source
share