del、remove和pop-on列表的区别

2024-04-19 03:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>> 

从列表中删除元素的上述三种方法之间有什么区别吗?


Tags: 方法元素列表popremovedel区别
3条回答

是,remove首先删除匹配值而不是特定索引:

>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]

del删除特定索引处的项:

>>> a = [3, 2, 2, 1]
>>> del a[1]
>>> a
[3, 2, 1]

并且pop移除特定索引处的项并返回它。

>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]

它们的错误模式也不同:

>>> a = [4, 5, 6]
>>> a.remove(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> del a[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a.pop(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop index out of range

由于没有其他人提到它,请注意del(与pop不同)允许由于列表切片而删除一系列索引:

>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]

如果索引不在列表中,这还允许避免IndexError

>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]

使用del按索引删除元素,使用pop()按索引删除(如果需要返回值),使用remove()按值删除元素。后者需要搜索列表,如果列表中没有此类值,则会引发ValueError

当从n元素列表中删除索引i时,这些方法的计算复杂性是

del     O(n - i)
pop     O(n - i)
remove  O(n)

相关问题 更多 >