python - Python list 的 count() 函数的时间复杂度是多少?

标签 python python-3.x time-complexity complexity-theory

我正在尝试计算 count() 函数的时间复杂度。

例如,如果有一个 [1, 2, 2, 3] 的列表,并且使用 [1, 2, 2, 3].count(2) .

我无休止地搜索并查看了 Python wiki here ,但它不在那里。

我找到答案最接近的是 here ,但是复杂性字段恰好是空的...有人知道答案是什么吗?

最佳答案

深入了解 CPython 源代码并访问 Objects/listobject.c ,你会在那里找到 count() 方法的源代码。它看起来像这样:

static PyObject *
list_count(PyListObject *self, PyObject *value)
{
    Py_ssize_t count = 0;
    Py_ssize_t i;

    for (i = 0; i < Py_SIZE(self); i++) {
        int cmp = PyObject_RichCompareBool(self->ob_item[i], value, Py_EQ);
        if (cmp > 0)
            count++;
        else if (cmp < 0)
            return NULL;
    }
    return PyLong_FromSsize_t(count);
}

它的作用是简单地遍历列表中的每个 PyObject,如果它们在丰富的比较中相等(请参阅 PEP 207),则会递增一个计数器。该函数仅返回此计数器。

最终list_count的时间复杂度为O(n)。只要确保您的对象没有时间复杂度很高的 __eq__ 函数,您就安全了。

关于python - Python list 的 count() 函数的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812468/

相关文章:

windows - 如何处理从 Python 中的子进程返回的负数?

php - 向数组添加元素的时间复杂度是多少?

algorithm - 渐近。如果 f(n) = theta(g(n)) 且 g(n) = theta(h(n)),那么为什么 h(n) = theta(f(n))

python - 你如何制作一个模拟二维网格的邻接矩阵

python - 在 Python 中查找数组中满足 inf < element < sep 的元素

python - 在 Python 中获取字符串中特殊字符后的第一个单词

python - 用于迭代 2 个列表的简单 for 循环

algorithm - 多个函数的大 O 表示法

python - 创建新日期时如何解决 "type object ' datetime.datetime' has no attribute 'timedelta' "?

python - Microsoft Graph API Nest JSON 请求失败