我有一个字典,充当不同键的计数器,即键的值是键发生的次数。 我使用字符串索引字典或整数索引字典更快吗?哪个有更好的表现?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)返回一个指定键的值。那么这种类型对你的情况应该不会有太大的区别。
给你一个实际结论的投票 –
你有没有想过_measuring it_? –
你期望得到多少数据?性能真的很重要吗?我的直觉就是用最简单的方式去编程。 – Matthew