Python的`in`关键字是否执行线性搜索?

时间:2013-03-11 03:57:57

标签: python algorithm keyword

Python如何使用in关键字检查迭代中是否存在给定值。它是否执行线性搜索?喜欢:

def naive(iterable, val):
    for i in range(len(l)):
        if iterable[i]==val:
            return True
    return False

?或者它有不同的方式。除了线性搜索?

3 个答案:

答案 0 :(得分:11)

Python的in运算符调用容器上的__contains__魔术函数。对于不同的容器,这是以不同的方式实现的。

对于strlisttuple s,它是线性搜索(O(N)),但由于它是在C中实现的,因此它可能比在你的问题中你有纯蟒蛇。

对于setdict,它是一个哈希表查找,速度更快(O(1)平均情况)。

其他容器将具有不同的性能特征。我不认为标准库中有任何内容,但平衡的树数据结构可能是O(log N)

答案 1 :(得分:8)

in关键字取决于您正在调用的对象类中__contains__方法的实现。这意味着对于任何不可清除的内容(列表,字符串),它执行线性搜索,但对于可清洗的数据结构(dict,set),它将按照常量时间进行摊销。

答案 2 :(得分:3)

如果它是线性数据结构,那么它就是线性搜索。示例:列表,字符串。如果它是一个设置,那么它是一个O(1)操作,或者如果我们检查一个键是否在一个字典中也是O(1)