作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
循环遍历 Python set
数字或 Python set
字母是否更快,因为每个集合的长度完全相同并且每个集合中的每个项目都是一样长?为什么?
我认为会有差异,因为字母 [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()
其中 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
所以在我的 Python 副本上,那些哈希结果与这些 reported Python hash algorithms 匹配.与 CPython 一样,您可以查看源代码以确认算法。
关于python - 循环遍历一组 Python 数字或一组字母是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347551/
我是一名优秀的程序员,十分优秀!