Python语句中的Python效率

时间:2013-12-15 04:53:13

标签: python performance

一个简单的问题,我知道在字典中查找条目时,有一种快速有效的方法:

(假设使用collections.OrderedDict()以某种方式对字典进行排序) 从字典的中间开始,找出所需的键是否关闭到一半或另一半,例如在按字母顺序排序的字典中测试名称的位置时(或者在极少数情况下死亡)。然后检查下一半,并继续此模式,直到找到该项(意味着使用1000000键的字典,您可以在此算法的20次迭代中有效地找到任何键)。

所以我想知道,如果我使用in语句(即if a in somedict:),是否会使用相同的方法检查所需的密钥?它使用更快/更慢的算法吗?

1 个答案:

答案 0 :(得分:1)

不。 Python的词典基本上使用hash table(它实际上使用修改的哈希表来提高速度)(我不打算解释哈希表;链接的维基百科文章描述得很好)这是一个允许〜的整洁结构〜 O(1)(非常快)访问。 in查找对象(与dict [object]相同的东西),除了它不返回对象,这是最佳的方法。

code for in for dictionaries包含此行(dk_lookup()返回哈希表条目(如果存在),否则为NULL(相当于C中的None,通常表示错误)):

ep = (mp->ma_keys->dk_lookup)(mp, key, hash, &value_addr);