>>> 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 = [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()
如果需要返回值则按索引remove()
删除,按值删除元素。最后一个需要搜索列表,ValueError
如果列表中没有出现这样的值,则引发。
i
从元素列表中删除索引时n
,这些方法的计算复杂度为
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]
这里有很多很好的解释,但我会尽力简化更多。
在所有这些方法中,remove
&pop
是后缀,而 delete 是前缀。
remove()
:用于删除第一次出现的元素。
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)
=> of 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]
:del 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 并绑定到特定类。
为了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
pop
将索引作为参数并删除该索引处的元素
与 不同del
,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
remove 获取参数值并从列表中删除该值。
如果存在多个值将删除第一次出现
Note
:如果该值不存在,将抛出 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 是一种混合线性数据结构,您可以在其中添加元素/从两端删除元素。(后端和前端)
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 - 有和没有索引。如果我不想返回值: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
让我们考虑集合的情况。
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.
列表上的删除操作被赋予一个要删除的值。它搜索列表以查找具有该值的项目并删除它找到的第一个匹配项目。如果没有匹配的项目,这是一个错误,引发一个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 返回它从列表中弹出的值。您可以选择为 pop 和 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。
虽然 pop 和 delete 都使用索引来删除上面评论中所述的元素。一个关键的区别是它们的时间复杂度。没有索引的 pop() 的时间复杂度为 O(1),但删除最后一个元素的情况不同。
如果您的用例总是要删除最后一个元素,则最好使用 pop() 而不是 delete()。关于时间复杂度的更多解释,可以参考https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
您也可以使用 remove 按索引删除值。
n = [1, 3, 5]
n.remove(n[1])
然后 n 将引用 [1, 5]