这三种从列表中删除元素的方法有什么区别吗?
>>> 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]
这三种从列表中删除元素的方法有什么区别吗?
>>> 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可用于特定类。
为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]
希望这个答案对你有帮助。
其他回答
从列表中删除元素的三种不同方法的效果:
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
这里有很多很好的解释,但我会尽量简化。
其中,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在执行速度上的差异:
当移除任何中间项目时:
import timeit
print(timeit.timeit("a=[1,2,3,4,5]\ndel a[3]",number=100000))
print(timeit.timeit("a=[1,2,3,4,5]\na.pop(3)",number=100000))
print(timeit.timeit("a=[1,2,3,4,5]\na.remove(3)",number=100000))
Del vs pop vs remove:
0.019387657986953855
0.02506213402375579
0.033232167130336165
Del()似乎比其他两个快得多,而remove()是最慢的。
同时删除最后一项:
print(timeit.timeit("a=[1,2,3,4,5]\ndel a[-1]",number=100000))
print(timeit.timeit("a=[1,2,3,4,5]\na.pop()",number=100000))
print(timeit.timeit("a=[1,2,3,4,5]\na.remove(5)",number=100000))
Del vs pop vs remove:
0.01974551402963698
0.020333584863692522
0.03434014297090471
Del()和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]
Remove主要作用于值。 删除和弹出工作在索引上
Remove基本上删除了第一个匹配的值。 Delete从指定索引中删除项 Pop基本上接受一个索引并返回该索引的值。下次打印列表时,该值不会出现。