一組似乎檢查字典鍵作爲集是一個稍快一點:檢查存在的字典VS在python
import random
import string
import timeit
repeat = 3
numbers = 1000
def time(statement, _setup=None):
print min(
timeit.Timer(statement, setup=_setup or setup).repeat(
repeat, numbers))
random.seed('slartibartfast')
# Integers
length = 100000
d = {}
for _ in range(length):
d[random.randint(0, 10000000)] = 0
s = set(d)
setup = """from __main__ import s, d, length
"""
time('for i in xrange(length): check = i in d')
time('for i in xrange(length): check = i in s')
# Strings
d = {}
for _ in range(length):
d[''.join(random.choice(string.ascii_uppercase) for __ in range(16))] = 0
s = set(d)
test_strings= []
for _ in range(length):
test_strings.append(random.choice(string.ascii_uppercase) for __ in range(16))
setup = """from __main__ import s, d, length, test_strings
"""
time('for i in test_strings: check = i in d')
time('for i in test_strings: check = i in s')
印像:
10.1242966769
9.73939713014
10.5156763102
10.2767765061
這是可以預料的或隨機神器?
想知道是否值得在性能密集型代碼中爲字典鍵創建集合。
編輯:我的測量結果真的讓我懷疑底層的實現,我不是想保存微秒,我只是好奇 - 是的,如果事實證明底層實現真的有利集,我可以做一組這些字典鍵 - 或不(我實際上是在修補遺留代碼)。
你在檢查空集&字典嗎?因爲你根本不使用「隨機」。這是故意的嗎? –
如果性能如此重要以至於毫秒的小部分的差異會產生差異,那麼Python可能是使用的錯誤語言。爲了便於閱讀,每100,000次迭代節省0.2秒。 –
@ Jean-FrançoisFabre:複製粘貼deamon –