python - del,删除和弹出列表之间的区别
>>> 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]
>>>
上述三种方法从列表中删除元素有什么区别吗?
sachin irukula asked 2018-12-30T16:36:04Z
10个解决方案
701 votes
是,pop删除第一个匹配值,而不是特定索引:
>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]
pop删除特定索引处的项目:
>>> 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 "", line 1, in
ValueError: ve(x): x not in list
>>> del a[7]
Traceback (most recent call last):
File "", line 1, in
IndexError: list assignment index out of range
>>> a.pop(7)
Traceback (most recent call last):
File "", line 1, in
IndexError: pop index out of range
Martijn Pieters answered 2018-12-30T16:36:31Z
98 votes
使用i按索引删除元素,n如果需要返回值,则按索引删除元素,使用remove()按值删除元素。 后者需要搜索列表,如果列表中没有出现这样的值,则会引发ValueError。
从n元素列表中删除索引i时,这些方法的计算复杂性是
del O(n - i)
pop O(n - i)
remove O(n)
Sven Marnach answered 2018-12-30T16:36:59Z
45 votes
由于没有其他人提到它,请注意del(与IndexError不同)允许删除一系列索引,因为列表切片:
>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]
如果索引不在列表中,这还允许避免使用IndexError:
>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
Chris_Rands answered 2018-12-30T16:37:27Z
30 votes
其他人已经很好地回答了。 这个来自我的结尾:)
显然,pop是唯一一个返回值的人,remove是唯一搜索该对象的人,而del将自己限制为简单删除。
Saurav Sahu answered 2018-12-30T16:37:56Z
9 votes
pop - 获取索引并返回值
remove - 获取值,删除第一个匹配项,并且不返回任何内容
delete - 获取索引,删除该索引处的值,并且不返回任何内容
Bahubali Patil answered 2018-12-30T16:38:31Z
1 votes
针对特定动作定义了针对不同数据结构的任何操作/功能。 在您的情况下,即删除元素,删除,弹出和删除。 (如果你考虑集合,添加另一个操作 - 丢弃)其他令人困惑的情况是在添加时。插入/追加。对于演示,让我们实现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 - 有和没有索引。如果我不想返回值:del self.items [0]
按值删除而不是索引:
去掉 :
list_ez=[1,2,3,4,5,6,7,8]
for i in list_ez:
if i%2==0:
ve(i)
print list_ez
退货[1,3,5,7]
让我们考虑一下集合的情况。
set_ez=set_ez=set(range(10))
ve(11)
# Gives Key Value Error.
##KeyError: 11
set_ez.discard(11)
# Does Not return any errors.
phanindravarma answered 2018-12-30T16:39:39Z
1 votes
这里有许多最好的解释,但我会尽力简化更多。
在所有这些方法中,反向& pop是postfix而delete是前缀。
remove():它用于删除第一次出现的元素
del (a) => 第一次出现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():用于删除元素,如果:
不明
del (a) => 从列表的末尾
>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]
规定
del (a) => 指数
>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]
警告:未来危险方法
delete():它的前缀方法。
关注相同方法的两种不同语法:[]和()。 它拥有以下权力:
1.删除索引
del (a) => 用于删除索引及其关联值,就像pop一样。
>>>del a[1]
>>>a
[0, 1, 4, 6, 5]
2.删除范围内的值[索引1:索引N]
del (a) => 范围内的多个值
>>>del a[0:3]
>>>a
[6, 5]
3.最后但不是列表,一次删除整个列表
del (a) => 如上所述。
>>>del (a)
>>>a
希望这澄清了混乱,如果有的话。
Mayur Patil answered 2018-12-30T16:41:57Z
0 votes
pop和delete都使用索引删除元素,如上面的注释中所述。 关键的区别在于它们的时间复杂性。 没有索引的pop()的时间复杂度是O(1),但删除最后一个元素的情况不同。
如果你的用例总是要删除最后一个元素,那么最好使用pop()而不是delete()。 有关时间复杂性的更多解释,请参阅[.txt]
skashyap answered 2018-12-30T16:42:27Z
0 votes
列表上的删除操作将被赋予要删除的值。 它搜索列表以查找具有该值的项目,并删除它找到的第一个匹配项目。 如果没有匹配项,则会出错,引发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 "", line 1, in
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 "", line 1, in
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 "", line 1, in
x.pop(4)
IndexError: pop index out of range
有关详细信息,请参阅collections.deque。
Kushan Gunasekera answered 2018-12-30T16:43:12Z
-4 votes
您也可以使用remove来按索引删除值。
n = [1, 3, 5]
n然后会参考[1,5]
max runia answered 2018-12-30T16:43:41Z
本文发布于:2024-02-02 00:48:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170681133040309.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |