2016-06-14 30 views
-2

我有一個字典,充當不同鍵的計數器,即鍵的值是鍵發生的次數。 我使用字符串索引字典或整數索引字典更快嗎?哪個有更好的表現?Python的字典索引或整數索引?

+4

你有沒有想過_measuring it_? –

+3

你期望得到多少數據?性能真的很重要嗎?我的直覺就是用最簡單的方式去編程。 – Matthew

回答

2
# coding=utf-8 

import sys 
import timeit 

print(sys.getsizeof(1000000000)) 
28 

print(sys.getsizeof('aaaaaaa')) 
56 

print(timeit.timeit('{1:1}', number=10 ** 7)) 
0.935662218856579 

print(timeit.timeit('{"1":1}', number=10 ** 7)) 
0.8795463330796326 

print(timeit.timeit(stmt='a[1]', setup='a = {1:1}', number=10 ** 7)) 
0.24523148719450227 

print(timeit.timeit(stmt='a["1"]',setup='a = {"1":1}', number=10 ** 7)) 
0.22414418170794992 

print(timeit.timeit('{x*x:x for x in range(1000)}', number=1000)) 
0.10348407957872885 

print(timeit.timeit('{"a"*x:x for x in range(1000)}', number=1000)) 
0.5330044677382393 

整數使用更少的內存,但字符串是一點點更快,當涉及到分配和從字典訪問....除非我們正在填補一個字典,字符串,在這種情況下,整數更快。

隨着裏卡多說。我懷疑是否有重大差異。

如果你想快速使用PyPy。

+0

有趣。是否因爲python的hash()函數對字符串更快? –

+0

我認爲這個測試有點不公平,因爲你只使用一個字符長度的字符串,而對於整數你有一個完整的64位表示。就OP發佈的問題而言,我懷疑這些字符串是否會放在一個字符長度範圍內。 –

+0

對於添加的每個額外字符,字符串的大小將增加1,因此出於實用目的,您可以使用許多或多個鍵。 int通常總是較小。至於爲什麼它更快?我不確定。整數是他們自己的散列碼,所以我不認爲它與'hash()'有關,但我真的不能說。 –

1

你的答案是:它使'幾乎'沒有區別。

問:爲什麼差不多?

答:根據字符大小的不同,字符串可能比整數更耗時,因爲您需要解釋器將字符串映射到數字,同時整數本身就是一個數字。但它可能會根據字符串的大小而有所不同。

但是它對你的情況幾乎沒有影響。結果顯示在Basili Syrakis提供的答案中。

你需要理解的是,字典是基於散列表,因此它將漸近地花費O(1)返回一個指定鍵的值。那麼這種類型對你的情況應該不會有太大的區別。

+0

給你一個實際結論的投票 –