ape*_*dge 5 python optimization dictionary
比方说我有一个
dict = {...} #lots of words in dictionary
Run Code Online (Sandbox Code Playgroud)
我必须做一个
for word in ...: #long list of words
if word in dict:
#do something
Run Code Online (Sandbox Code Playgroud)
我的问题是,'if word in dict'是否每次都调用dict.keys()函数,因此比在顶部添加另一个变量dict_keys = dict.keys()慢很多?我所说的结果就是这个.
dict = {...}
dict_keys = dict.keys()
for word in ...:
if word in dict_keys:
#do something
Run Code Online (Sandbox Code Playgroud)
谢谢
nos*_*klo 10
没有.foo in mydict其实快了很多比foo in keys_list,因为dicts为哈希表,所以寻找元素里面是O(1).虽然foo in keys_list会O(n)(随着键数变大而变慢)
但是你总能测试自己:
$ python -m timeit -s "x = range(1000)" "15 in x"
1000000 loops, best of 3: 0.311 usec per loop
$ python -m timeit -s "x = dict.fromkeys(xrange(1000))" "15 in x"
10000000 loops, best of 3: 0.0515 usec per loop
Run Code Online (Sandbox Code Playgroud)
因此,直接检查dict1000个元素的速度要快一个数量级,而不考虑时间.keys()
实际上,内置的dicts只是调用它们__contains__直接调用dict_has_key非常快的C函数.所以,第一种方式做得更好是因为它不会强迫你像调用keys()那样评估你的dict中的整个键序列.
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |