我有一個字典,充當不同鍵的計數器,即鍵的值是鍵發生的次數。 我使用字符串索引字典或整數索引字典更快嗎?哪個有更好的表現?Python的字典索引或整數索引?
回答
# 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。
有趣。是否因爲python的hash()函數對字符串更快? –
我認爲這個測試有點不公平,因爲你只使用一個字符長度的字符串,而對於整數你有一個完整的64位表示。就OP發佈的問題而言,我懷疑這些字符串是否會放在一個字符長度範圍內。 –
對於添加的每個額外字符,字符串的大小將增加1,因此出於實用目的,您可以使用許多或多個鍵。 int通常總是較小。至於爲什麼它更快?我不確定。整數是他們自己的散列碼,所以我不認爲它與'hash()'有關,但我真的不能說。 –
你的答案是:它使'幾乎'沒有區別。
問:爲什麼差不多?
答:根據字符大小的不同,字符串可能比整數更耗時,因爲您需要解釋器將字符串映射到數字,同時整數本身就是一個數字。但它可能會根據字符串的大小而有所不同。
但是它對你的情況幾乎沒有影響。結果顯示在Basili Syrakis提供的答案中。
你需要理解的是,字典是基於散列表,因此它將漸近地花費O(1)返回一個指定鍵的值。那麼這種類型對你的情況應該不會有太大的區別。
給你一個實際結論的投票 –
- 1. 列表索引必須是整數python嵌套字典
- 2. 字典,數組或列表的索引快速搜索和值
- 3. Json的字典索引
- 4. python:索引列表作爲字典
- 5. 在字典中設置索引Python
- 6. 位排列索引字典
- 7. 打印字典索引號?
- 8. PHP數組:整數索引VS字符串索引
- 9. 多哈希中的整數索引比字符索引好
- 10. Mongodb索引或不索引
- 11. 索引或不索引
- 12. Python索引索引尋找
- 13. Python:防止python索引數組。列表索引必須是整數
- 14. 從字典數組ArrayList獲取索引
- 15. 如何索引到字典數組
- 16. Python數組索引
- 17. Python的多字索引
- 18. 1維的索引或多個索引
- 19. 數組索引與整數
- 20. TypeError:列表索引必須是整數,而不是字典
- 21. 列表索引必須是整數,而不是字典
- 22. 列表索引必須是整數或切片,而不是字典
- 23. 索引,索引,索引
- 24. python:列表和字典,TypeError:列表索引必須是整數,而不是str
- 25. 詞典 - >在Python索引列表
- 26. C#實現字典創建字索引
- 27. Python中的數組索引
- 28. 字符串索引必須是整數?
- 29. 字典中列表的訪問索引?
- 30. 字典上的RavenDB靜態索引
你有沒有想過_measuring it_? –
你期望得到多少數據?性能真的很重要嗎?我的直覺就是用最簡單的方式去編程。 – Matthew