Sco*_*ell 0 python algorithm list set
如果每个集合的长度完全相同并且每个集合中的每个项目长度相同,那么循环set
数字Python 或set
字母Python会更快吗?为什么?
我认为会有差异,因为字母有更多可能的字符[a-zA-Z]而不是数字[0-9],因此更加"随机"并且可能在某种程度上影响散列.
numbers = set([00000,00001,00002,00003,00004,00005, ... 99999])
letters = set(['aaaaa','aaaab','aaaac','aaaad', ... 'aaabZZ']) # this is just an example, it does not actually end here
for item in numbers:
do_something()
for item in letters:
do_something()
Run Code Online (Sandbox Code Playgroud)
其中len(数字)== len(字母)
更新:我对Python的特定散列算法感兴趣,以及使用此实现在幕后发生的事情.
可能有一些Python的特定实现细节,我不知道这里的一般参数混乱,但是:
timeit
你关心的数据的实际例子一样.猜测通常是浪费时间.您可以看到Python的散列算法的结果,如下所示:
>>> foo = 3
>>> foo.__hash__()
3
>>> foo = 1856348
>>> foo.__hash__()
1856348
>>> foo = "\x00"
>>> foo.__hash__()
1
>>> foo = "\x01"
>>> foo.__hash__()
128000384
>>> foo = "\x02"
>>> foo.__hash__()
256000771
Run Code Online (Sandbox Code Playgroud)
因此,在我的Python副本中,这些哈希结果与这些报告的Python哈希算法相匹配.与CPython一样,您可以查看源代码以确认算法.