【问题标题】:Difference in time complexity between python .index() and .find()python .index() 和 .find() 之间的时间复杂度差异
【发布时间】:2021-02-02 18:19:11
【问题描述】:

我想知道.find().index() 之间的时间复杂度在 Python 中有何不同。在执行 LeetCode 时,我注意到 .find() 方法比 .index() 方法花费的时间明显更长。据我了解,这两种方法都应该在O(n) 中运行。 我看到的唯一区别是,当您搜索的元素不存在时,.index() 会抛出 ValueError。

有人知道这种速度差异是从哪里来的吗?还有一个文档可以让您找到各种 Python 方法的时间复杂度吗?

【问题讨论】:

    标签: python arrays string


    【解决方案1】:

    str.findstr.index 都只是 any_find_slice 的薄包装,它们唯一有意义的区别是在 str.index 中添加以下内容:

    if (result < 0) {
        PyErr_SetString(PyExc_ValueError, "substring not found");
        return NULL;
    }
    

    因此,任何感知到的运行时差异如果为真(您没有包含表明您的声明为真的基准)必须来自异常处理。

    【讨论】:

    • 感谢您的回答。我还认为异常处理可能是将运行时添加到.index() 调用的原因。但是,.index() 调用实际上更快(很抱歉没有在上述问题中包括这个)。这个声明''.join(sorted(T, key=lambda x: S.index(x) if x in S else 0))需要 16 毫秒,而 ''.join(sorted(T, key=lambda x: S.find(x) if x in S else 0)) 需要 32 毫秒(我知道 x in S 在这里不需要,但我把它留了下来以便公平比较)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多