删除,删除和弹出列表之间的区别

>>> 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]
>>> 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()可以按索引删除元素,如果需要返回值,可以使用remove()可以按值删除元素。后者需要搜索列表,并且如果列表中没有这样的值,则会引发ValueError

n元素的列表中删除索引i ,这些方法的计算复杂度为

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

由于没有人提到它,因此请注意,由于列表切片, 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]

已经被其他人很好地回答了。这是我的结尾:)

删除vs流行vs del

显然, pop是返回值的唯一对象,而remove是搜索对象的唯一对象,而del将自身限制为简单的删除。

pop - 获取索引并返回值

remove - 取值,删除第一个匹配项,不返回任何内容

delete - 获取索引,删除该索引处的值,并且不返回任何内容

这里有很多最佳的解释,但我会尽力简化一下。

在所有这些方法中,reverse 和 pop 是后缀,而 delete 是prefix

remove():用于删除元素的第一次出现

remove(i) => 第一个出现的 i 值

>>> a = [0, 2, 3, 2, 1, 4, 6, 5, 7]
>>> a.remove(2)   # where i = 2
>>> a
[0, 3, 2, 1, 4, 6, 5, 7]

pop():如果满足以下条件,则用于删除元素:

未指定

pop() => 从列表末尾开始

>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]

指定的

pop(index) => 索引

>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]

警告:危险方法提前

delete() :它是一个前缀方法。

注意同一方法的两种不同语法:[] 和()。它具有以下功能:

1. 删除索引

del a[index] => 用于删除索引及其关联值,就像 pop 一样。

>>>del a[1]
>>>a
[0, 1, 4, 6, 5]

2. 删除范围为 [index 1:index N] 的值

del a[0:3] => 范围内的多个值

>>>del a[0:3]
>>>a
[6, 5]

3. 最后但不是列表,一次删除整个列表

如上所述, del (a) =>。

>>>del (a)
>>>a

希望这可以澄清混淆。

针对特定动作定义了对不同数据结构的任何操作 / 功能。根据您的情况,即删除一个元素,然后删除,弹出和删除。 (如果考虑设置,则添加另一个操作 - 丢弃)添加时其他令人困惑的情况。插入 / 追加。为了演示,让我们实现双端队列。 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/lectures/complexitypython.txt

列表上的删除操作具有要删除的值。它搜索列表以查找具有该值的项目,并删除找到的第一个匹配项目。如果没有匹配项,将引发ValueError ,这是一个错误。

>>> x = [1, 0, 0, 0, 3, 4, 5]
>>> x.remove(4)
>>> x
[1, 0, 0, 0, 3, 5]
>>> del x[7]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    del x[7]
IndexError: list assignment index out of range

del语句可用于删除整个列表。如果您有一个特定的列表项作为 del 的参数(例如,listname [7] 专门引用列表中的第 8 个项),则将其删除。甚至有可能从列表中删除 “片段”。如果索引超出范围,则会引发IndexError ,这是一个错误。

>>> x = [1, 2, 3, 4]
>>> del x[3]
>>> x
[1, 2, 3]
>>> del x[4]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    del x[4]
IndexError: list assignment index out of range

pop的通常用法是在将列表用作堆栈时删除列表中的最后一项。与 del 不同,pop 返回从列表中弹出的值。您可以选择提供一个索引值来从列表的末尾弹出和弹出(例如 listname.pop(0)将从列表中删除第一项并返回该第一项作为结果)。您可以使用它使列表表现得像队列一样,但是有一些库例程可以提供比 pop(0)更好的队列操作性能。如果索引超出范围,则会引发IndexError ,这是一个错误。

>>> x = [1, 2, 3] 
>>> x.pop(2) 
3 
>>> x 
[1, 2]
>>> x.pop(4)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    x.pop(4)
IndexError: pop index out of range

有关更多详细信息,请参见collections.deque

删除基本上对值起作用。删除并弹出索引上的工作

删除基本上删除第一个匹配值。 Delete 删除特定索引中的项目 Pop 基本上会获取一个索引并返回该索引处的值。下次打印列表时,该值不会出现。

例: