这三种从列表中删除元素的方法有什么区别吗?
>>> 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按索引删除值。
n = [1, 3, 5]
n.remove(n[1])
N则表示[1,5]
其他回答
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()删除最后一项所需的时间相似。
而pop和delete都采用索引来删除上面注释中所述的元素。一个关键的区别是它们的时间复杂度。没有索引的pop()的时间复杂度是O(1),但删除最后一个元素的情况不同。
如果您的用例总是删除最后一个元素,那么使用pop()而不是delete()总是更好的。有关时间复杂性的更多解释,请参阅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]
pop
获取index(如果给定,则获取last),删除该索引处的值,并返回值
删除
获取值,删除第一次出现的内容,并不返回任何内容
删除
获取索引,删除该索引处的值,并不返回任何值
也可以使用remove按索引删除值。
n = [1, 3, 5]
n.remove(n[1])
N则表示[1,5]