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

>>> 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主要作用于值。 删除和弹出工作在索引上

Remove基本上删除了第一个匹配的值。 Delete从指定索引中删除项 Pop基本上接受一个索引并返回该索引的值。下次打印列表时,该值不会出现。

其他回答

Remove (), del和pop()都很慢…“None”呢?

在这么多的回复中,我没有看到任何人谈论性能。所以我有一个性能建议:

Remove (), del和pop()在删除后将所有剩余值移到左边…

1, 2, 3, 4, 5, 6
remove(3)
1, 2, <- 4, 5, 6

...使处理变慢!

将期望的值更改为null,以便进一步处理删除,这只能为您的程序增加很多速度,特别是在处理大量数据时:

my_array[2] = None

当然,设置空值与删除空值是不同的,但是如果您想了解更多关于删除的知识,考虑一下这个操作的性能对我来说也很有趣。

也可以使用remove按索引删除值。

n = [1, 3, 5]

n.remove(n[1])

N则表示[1,5]

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

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

因为没有人提到它,请注意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]

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

其中,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

希望这能澄清困惑。