gpt4 book ai didi

python - 在 python 中使用 [::-1] 来反转列表 O(1) 空间吗?

转载 作者:行者123 更新时间:2023-12-03 20:26:22 25 4
gpt4 key购买 nike

所以如果我写:

item_list = item_list[::-1]

这会是 O(1) 空间吗?我认为 item_list[::-1] 导致创建一个新列表,所以这可能是 O(n)。 item_list.reverse() 那么是在python中用 O(1) 空间反转的正确方法吗?

最佳答案

你说得对some_list[::-1]创建一个新列表,该列表将有 n 个“槽”,因此需要 O(n) 内存。

此外在 CPython [GitHub] ,Python 的解释器,.reverse()在 O(1) 内存中完成。事实上,如果我们看一下 reverse method [GitHub] , 我们看:

/*[clinic input]
list.reverse
Reverse *IN PLACE*.
[clinic start generated code]*/

static PyObject *
list_reverse_impl(PyListObject *self)
/*[clinic end generated code: output=482544fc451abea9 input=eefd4c3ae1bc9887]*/
{
if (Py_SIZE(self) > 1)
reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
Py_RETURN_NONE;
}


因此它调用了一个函数 reverse_slice , and this is implemented as [GitHub] :

/* Reverse a slice of a list in place, from lo up to (exclusive) hi. */
static void
reverse_slice(PyObject **lo, PyObject **hi)
{
assert(lo && hi);

--hi;
while (lo < hi) {
PyObject *t = *lo;
*lo = *hi;
*hi = t;
++lo;
--hi;
}
}


因此它使用两个指针,一个按升序迭代,另一个按降序迭代,这些值相互“交换”,直到它们在中途相遇。

关于python - 在 python 中使用 [::-1] 来反转列表 O(1) 空间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com