2016-06-14 184 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

给你一个实际结论的投票 –