列表中del、Remove和POP之间的差异

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (8)
  • 关注 (0)
  • 查看 (457)
>>> 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]
>>> 

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

提问于
用户回答回答于

remove移除第一匹配,而不是一个特定索引:

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

del移除特定索引:

>>> a = [3, 2, 2, 1]
>>> del a[1]
[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
用户回答回答于

还可以使用Remove按索引删除值。

n = [1, 3, 5]

n.remove(n[1])

然后,n将取值为1,5

用户回答回答于

对不同数据结构的任何操作/功能都是为特定操作定义的。在这里,在您的情况下,即删除一个元素,删除,POP和DELETE。(如果您考虑集合,添加另一个operation-discard)其他混淆的情况是同时添加。插入/追加。为了证明,让我们实施DEQUE。DEQue是一种混合线性数据结构,可以在其中添加元素/从两端删除元素。

class Deque(object):

  def __init__(self):

    self.items=[]

  def addFront(self,item):

    return self.items.insert(0,item)
  def addRear(self,item):

    return self.items.append(item)
  def deleteFront(self):

    return self.items.pop(0)
  def deleteRear(self):
    return self.items.pop()
  def returnAll(self):

    return self.items[:]

在这里,请参阅操作:

def deleteFront(self):

    return self.items.pop(0)
def deleteRear(self):
    return self.items.pop()

操作必须要返回一些值。所以,不管有没有索引。如果我不想返回值:del self.items[0]

删除按值而不是索引:

  • 移除:

list_ez=[1,2,3,4,5,6,7,8] for i in list_ez: if i%2==0: list_ez.remove(i) print list_ez

返回1,3,5,7

让我们考虑集合的情况。

set_ez=set_ez=set(range(10))

set_ez.remove(11)

# Gives Key Value Error. 
##KeyError: 11

set_ez.discard(11)

# Does Not return any errors.
用户回答回答于

当POP和DELETE都采用索引来删除上述注释中所述的元素。一个关键的区别是他们的时间复杂性。没有索引的POP()的时间复杂度是O(1),但删除最后一个元素的时间复杂度却不一样。

如果用例总是删除最后一个元素,那么最好使用POP()而不是DELETE()。有关时间复杂性的更多解释,请参阅https://www.ics.uci.edu/~Pattis/ICS-33/讲座/Compositypython.txt

用户回答回答于

POP:采用索引&返回值

移除:取值,删除第一次出现,不返回任何内容。

删除:获取索引,删除该索引的值,而不返回任何内容。

用户回答回答于
用户回答回答于

既然没人提过,请注意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

删除索引时in元素,这些方法的计算复杂性如下

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

所属标签

可能回答问题的人

  • 天使的炫翼

    15 粉丝531 提问35 回答
  • 旺仔小小鹿

    社区 · 运营 (已认证)

    48 粉丝0 提问27 回答
  • 富有想象力的人

    2 粉丝0 提问26 回答
  • 发条丶魔灵1

    6 粉丝525 提问25 回答

扫码关注云+社区

领取腾讯云代金券