Python列表反转的时间复杂度是多少?

Python列表反转的时间复杂度是多少?,python,list,time-complexity,Python,List,Time Complexity,我看过这个页面,但没有看到列表的reverse()函数。list的reverse()的时间复杂度是多少 我的时间实验表明,对于较大的尺寸,它是O(n)。有人能证实吗 时间是反转大小列表的时间 10 .1027 100 .2347 1000 .6704 10000 6.204 20000 12.9 是的,你是对的,它是O(n),其中n是列表的长度。 查看此处以了解更多信息:如果您查看reverse方法的实现,则其如下所示: static PyObject *

我看过这个页面,但没有看到列表的
reverse()
函数。
list
reverse()
的时间复杂度是多少

我的时间实验表明,对于较大的尺寸,它是
O(n)
。有人能证实吗

时间是反转大小列表的时间

   10    .1027
  100    .2347
 1000    .6704
10000   6.204
20000  12.9

是的,你是对的,它是O(n),其中n是列表的长度。
查看此处以了解更多信息:

如果您查看
reverse
方法的实现,则其如下所示:

static PyObject *
listreverse(PyListObject *self)
{
    if (Py_SIZE(self) > 1)
        reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
    Py_RETURN_NONE;
}
因此,该操作实际上被委托给
反向切片
。那么,让我们来研究一下:

static void
reverse_slice(PyObject **lo, PyObject **hi)
{
    assert(lo && hi);

    --hi;
    while (lo < hi) {
        PyObject *t = *lo;
        *lo = *hi;
        *hi = t;
        ++lo;
        --hi;
    }
}
然后左索引递增,右索引递减:

++lo;
--hi;

只要右索引超过左索引,循环就会继续。因此,如果列表中有
n
元素,则将执行
n/2
迭代,因此时间复杂度为
O(n)
,如果您看到算法很容易看到反向的时间复杂度为
O(n)
线性时间复杂度)其中n是列表中元素的编号。

通过诸如reverse()之类的内置库或使用切片a=a[::-->]来反转列表将花费相同的时间,即O(n)

我知道这不是最重要的答案,但这是迄今为止最彻底的答案。你是如何看待这个函数的实现的?@IkechukwuAnude当时我研究过。此外,您还可以在github上查看。我还更新了指定源文件的答案。
++lo;
--hi;