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

>>> 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]

当前回答

使用del按索引删除元素,使用pop()按索引删除元素(如果需要返回值),使用remove()按值删除元素。最后一个需要搜索列表,如果列表中没有这样的值,则引发ValueError。

当从一个包含n个元素的列表中删除索引i时,这些方法的计算复杂度为

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

其他回答

下面是一个详细的答案。

Del可用于任何类对象,而pop和remove可用于特定类。

为del

下面是一些例子

>>> a = 5
>>> b = "this is string"
>>> c = 1.432
>>> d = myClass()

>>> del c
>>> del a, b, d   # we can use comma separated objects

我们可以在用户创建的类中重写__del__方法。

具体用途与列表

>>> a = [1, 4, 2, 4, 12, 3, 0]
>>> del a[4]
>>> a
[1, 4, 2, 4, 3, 0]

>>> del a[1: 3]   # we can also use slicing for deleting range of indices
>>> a
[1, 4, 3, 0]

为流行

Pop将索引作为参数,并删除该索引处的元素

与del不同,当在list object上调用pop时,返回该下标处的值

>>> a = [1, 5, 3, 4, 7, 8]
>>> a.pop(3)  # Will return the value at index 3
4
>>> a
[1, 5, 3, 7, 8]

为消除

Remove获取参数值并从列表中删除该值。

如果存在多个值,则删除第一个值

注意:如果该值不存在,将抛出ValueError

>>> a = [1, 5, 3, 4, 2, 7, 5]
>>> a.remove(5)  # removes first occurence of 5
>>> a
[1, 3, 4, 2, 7, 5]
>>> a.remove(5)
>>> a
[1, 3, 4, 2, 7]

希望这个答案对你有帮助。

不同数据结构上的任何操作/函数都是为特定操作定义的。这里在你的情况下,即删除一个元素,删除,弹出和删除。(如果你考虑集合,添加另一个操作-丢弃) 另一种令人困惑的情况是加法。插入/追加。 为了演示,让我们实现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()

操作必须返回一些东西。pop -带索引和不带索引。 如果我不想返回值: 德尔self.items [0]

不按值删除:

删除: list_ez = [1, 2, 3, 4, 5, 6, 7, 8) 对于list_ez中的I: 如果我% 2 = = 0: list_ez.remove(我) 打印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.

这里有很多很好的解释,但我会尽量简化。

其中,remove和pop是后缀,delete是前缀。

remove():用于删除第一次出现的元素。 删除(n) =>第一次出现在列表中的n。

>>> 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) = index的>

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

警告:前方有危险

del():这是一个前缀方法。

注意相同方法的两种不同语法:带[]和不带。它有能力:

删除索引 Del a[index] =>用于删除索引和它的关联值,就像pop一样。

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

删除范围[index_1:index_N]中的值: 删除a[0:3] =>多个范围内的值。

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

最后但并非最不重要的,删除整个列表在一个镜头。 如上所述,Del (a) =>。

>>> del (a)
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

希望这能澄清困惑。

使用del按索引删除元素,使用pop()按索引删除元素(如果需要返回值),使用remove()按值删除元素。最后一个需要搜索列表,如果列表中没有这样的值,则引发ValueError。

当从一个包含n个元素的列表中删除索引i时,这些方法的计算复杂度为

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

从列表中删除元素的三种不同方法的效果:

Remove删除第一个匹配的值,而不是特定的索引:

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

Del删除特定索引处的项:

>>> a = [9, 8, 7, 6]
>>> del a[1]
>>> a
[9, 7, 6]

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