Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查字典比查列表快吗?_Python_List_Search_Dictionary_Time Complexity - Fatal编程技术网

Python 查字典比查列表快吗?

Python 查字典比查列表快吗?,python,list,search,dictionary,time-complexity,Python,List,Search,Dictionary,Time Complexity,我是Python新手,我注意到有两种方法可以在字典中搜索关键字: d={1: 'a', 2: 'b',...} if 1 in d: ... 或 我原以为它们是一样的,但由于我不得不在一本包含100000个元素的字典中搜索,我发现第二种方法花费了太多的时间。我一直在寻找并阅读,这是因为d.keys()返回一个列表,然后搜索元素的时间复杂度是O(n),但在字典中搜索的复杂度是O(1)。那是真的吗?是的,是真的。大多数字典都实现为哈希映射。所以你有O(1)来访问。对于一个列表,这比O(n)快得多

我是Python新手,我注意到有两种方法可以在字典中搜索关键字:

d={1: 'a', 2: 'b',...}
if 1 in d: ... 


我原以为它们是一样的,但由于我不得不在一本包含100000个元素的字典中搜索,我发现第二种方法花费了太多的时间。我一直在寻找并阅读,这是因为
d.keys()
返回一个列表,然后搜索元素的时间复杂度是O(n),但在字典中搜索的复杂度是O(1)。那是真的吗?

是的,是真的。大多数字典都实现为哈希映射。所以你有O(1)来访问。对于一个列表,这比O(n)快得多

为什么只需要O(1)? 因为散列映射对每个键进行散列,并将其放入生成的bucket中。如果您搜索一个键,它将散列您的输入并查看是否有值。如果有一个值,它将返回该值,否则会通知您没有条目。就像快速的一瞥


如果你对这样的东西感兴趣,你应该看看cormen的“算法简介”

了解更多信息。@TigerhawkT3谢谢你提供的信息:)我不知道!没问题-我只是在谷歌上搜索了“python字典列表o(n)”。因为你自己看到了真实世界的结果,并且你提到你已经在网上做了研究,我不确定你到底在寻找什么,除了“是的,你得出了正确的结论。”你确实做到了。:)请注意,在Python 3中,dict.keys()返回一个视图对象,并且它还支持O(1)查找。@TigerhawkT3不,我想要一个可靠的信息源,而您提供的信息接近O(1)。当存在键碰撞时,它会稍微发散。这是对的,但据我所知,它将由一个常量值表示。O(1*c)也是对的,但是你可以去掉常量值,所以它应该是O(1),我认为它不是常量。它取决于键空间和项目数。但对手头的问题来说并不重要。但哈希映射的思想是使用具有低冲突预测的哈希算法。。。所以你认为它应该是一个很小的值。。。但它不是常数,但我想忽略它是没有问题的。。。
if 1 in d.keys():