list.pop()和list = list [:-1]之间的区别

bmp*_*ini 3 python list

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]
>>> a = [1,2,3]
>>> a = a[:-1]
>>> a
[1, 2]
>>>
Run Code Online (Sandbox Code Playgroud)

从列表中删除最后一个元素的上述方法之间有什么区别吗?

ggo*_*len 13

是。pop为O(1)并更改原始列表,而slice为O(n)并创建列表的副本。非正式地讲,该pop方法是对列表末尾元素的操作,并在CPython中定义为对的调用list_resize(self, Py_SIZE(self) - 1);。这不会遍历整个结构。

另一方面,list_slice分配一个新列表,并循环遍历旧列表中的条目,从头到尾-1,将对每个项目的引用复制到新列表中。

如果您要删除的是列表的最后一个元素,请使用pop

  • 好问题。不,`pop`传统上是堆栈数据结构“顶部”或背面/右侧的O(1)操作。Python中的列表为pop提供了一个额外的参数,使其能够在中间运行,但是列表中的其余元素需要向前移动以填补空白O(n)。检查源代码的全文。有一个条件可以在`pop()`和`pop(n)`之间切换-后者调用`list_ass_slice(self,index,index + 1,(PyObject *)NULL);`执行前移操作在清单上。如果您经常使用`pop(0)`,请查看`collections.deque`。 (4认同)