>>> 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]
>>>
上述三种方法从列表中删除元素有没有区别?删除,删除和弹出列表之间的区别
是,remove
去除第一匹配值,而不是一个特定的索引:
>>> a = [3, 2, 2, 1]
>>> del a[1]
[3, 2, 1]
和pop
删除项目:
>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]
del
在特定索引中删除该项目在一个特定的索引并返回它。
>>> 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
。
当从n
元素的列表中删除索引i
,这些方法的计算复杂性是
del O(n - i)
pop O(n - i)
remove O(n)
是否需要搜索列表 – 2012-07-17 10:31:01
@kratos:不,请参阅我的编辑。 – 2012-07-17 10:34:34
+1复杂度分解。说明当元素位于列表的末尾时,删除和弹出如何保持不变。 – 2014-11-06 05:56:54
您还可以使用删除,以消除指数的值也是如此。然后
n = [1, 3, 5]
n.remove(n[1])
N将参考[1,5]
尝试'n = [5,3,5]',然后'n.remove(n [2])'。 – abarnert 2014-02-18 03:46:58
弹出:取索引&返回值
删除:取值,除去第一次出现,并且没有返回
删除:取索引,删除该索引处的值并且不返回任何内容
虽然pop和delete都采用索引来删除元素,如评论。一个关键的区别是它们的时间复杂性。没有索引的pop()的时间复杂度是O(1),但删除最后一个元素的情况并非如此。
如果你的用例总是删除最后一个元素,那么最好在delete()上使用pop()。有关时间的复杂性更多的解释,你可以参考https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
由于没有其他人提到它,注意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]
任何操作/功能是为特定动作定义离子。在你的情况下,即删除元素,删除,弹出和删除。 (如果您考虑设置,添加另一个操作 - 丢弃) 其他混淆的情况是添加。插入/追加。 为了演示,让我们执行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()
操作必须回报什么。所以,流行 - 有和没有索引。 如果我不想返回值: 德尔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.
我喜欢这个图。 – 2017-11-28 17:45:19
yh很好的例证 – Kodejuice 2017-12-03 15:34:23
我认为'del'是一个像'print'一样的Python 2语法保留,但它仍然可以在python 3中工作。 – jxramos 2017-09-01 20:12:33
@jxramos:'del'不是语法保留,不。语法不变,就像'return'或'if'或'while'一样。 – 2017-09-01 20:57:08