这三种从列表中删除元素的方法有什么区别吗?
>>> 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]
当前回答
其他人已经回答得很好了。这个来自我这边:)
显然,pop是唯一返回值的函数,remove是唯一搜索对象的函数,而del将自身限制为简单的删除。
其他回答
Remove主要作用于值。 删除和弹出工作在索引上
Remove基本上删除了第一个匹配的值。 Delete从指定索引中删除项 Pop基本上接受一个索引并返回该索引的值。下次打印列表时,该值不会出现。
pop
获取index(如果给定,则获取last),删除该索引处的值,并返回值
删除
获取值,删除第一次出现的内容,并不返回任何内容
删除
获取索引,删除该索引处的值,并不返回任何值
而pop和delete都采用索引来删除上面注释中所述的元素。一个关键的区别是它们的时间复杂度。没有索引的pop()的时间复杂度是O(1),但删除最后一个元素的情况不同。
如果您的用例总是删除最后一个元素,那么使用pop()而不是delete()总是更好的。有关时间复杂性的更多解释,请参阅https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
不同数据结构上的任何操作/函数都是为特定操作定义的。这里在你的情况下,即删除一个元素,删除,弹出和删除。(如果你考虑集合,添加另一个操作-丢弃) 另一种令人困惑的情况是加法。插入/追加。 为了演示,让我们实现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.
其他人已经回答得很好了。这个来自我这边:)
显然,pop是唯一返回值的函数,remove是唯一搜索对象的函数,而del将自身限制为简单的删除。