【发布时间】:2018-03-12 13:42:29
【问题描述】:
在字典中搜索元素时,我对使用“in”和“get”有点困惑。
根据这个时间复杂度表,here:当使用“in”时,我们得到 O(n),而“get”得到 O(1)。
在下面这两个sn-ps代码中,实现的都是一样的,但是显然用get会快很多?
#Recall that for "get" the second parameter is returned if key is not found
#O(1) time complexity
if dict.get(key, False):
return "found item"
#O(n) time complexity
if key in dict:
return "found item"
我不明白当他们都可以实现相同的事情时,使用 get 会如何改变时间复杂度。除了 get 调用将实际返回该值(如果找到)。
问题:当它们都达到相同的结果时,“in”时间复杂度是 O(n) 而“get”只有 O(1) 怎么办?如果这是真的,是否有理由在字典中使用“in”?
【问题讨论】:
-
这是 list 中
in的时间复杂度。 -
该链接并没有说出您认为的内容。两者的时间复杂度相同
-
对于一个字典,
in和get()都是O(1)的预期时间,但O(len(dict))是最坏的情况。in是测试成员资格的明显方法,因此请使用它。dict.get(key, False)甚至都不正确(例如,假设 key 为 0,或其他一些“类似假”的值)。 -
@Tim 对,我没想到,谢谢
标签: python python-3.x dictionary hash