Difference between del, remove, and pop on lists Difference between del, remove, and pop on lists python python

Difference between del, remove, and pop on lists


The effects of the three different methods to remove an element from a list:

remove removes the first matching value, not a specific index:

>>> a = [0, 2, 3, 2]>>> a.remove(2)>>> a[0, 3, 2]

del removes the item at a specific index:

>>> a = [9, 8, 7, 6]>>> del a[1]>>> a[9, 7, 6]

and pop removes the item at a specific index and returns it.

>>> a = [4, 3, 5]>>> a.pop(1)3>>> a[4, 5]

Their error modes are different too:

>>> 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


Use del to remove an element by index, pop() to remove it by index if you need the returned value, and remove() to delete an element by value. The last requires searching the list, and raises ValueError if no such value occurs in the list.

When deleting index i from a list of n elements, the computational complexities of these methods are

del     O(n - i)pop     O(n - i)remove  O(n)


Since no-one else has mentioned it, note that del (unlike pop) allows the removal of a range of indexes because of list slicing:

>>> lst = [3, 2, 2, 1]>>> del lst[1:]>>> lst[3]

This also allows avoidance of an IndexError if the index is not in the list:

>>> lst = [3, 2, 2, 1]>>> del lst[10:]>>> lst[3, 2, 2, 1]