Tutorialsteacher

Follow Us

How to remove items from list in Python?

To remove an item from a list, we have two options. One is using del mylist[i] where i is the index. Other is call mylist.remove(i) method where i is item in the list.

Generally, you would remove item from list if a certain condition is satisfied. Assuming that we want to delete even numbers from mylist, the iteration with index results in error

Example: Remove Items From List using del
mylist=[5,3,7,8,20,15,2,6,10,1] l=len(mylist) for i in range(l): if (mylist[i]%2==0): del mylist[i]
Output
IndexError: list index out of range

This is because list object is dynamically resized as items get deleted. Hence this method for removing item while iterating list doesn't work. A workaround for this could be to employ a decrementing loop. In this example, list size is 10, hence decrement index from 9 to 0

Example: Remove Items From List using del
mylist=[5,3,7,8,20,15,2,6,10,1] for i in range(len(mylist)-1, -1, -1): if mylist[i]%2==0: del mylist[i] print (mylist)
Output
[5, 3, 7, 15, 1]

Calling remove() method of List object also gives incorrect result

Example: Remove Items From List using remove()
mylist=[5,3,7,8,20,15,2,6,10,1] for i in mylist: if (i%2==0): mylist.remove(i) print (mylist)
Output
[5, 3, 7, 20, 15, 6, 1]

We can see that even numbers 20 and 6 are not deleted. This is because when i becomes 8, it is removed and items on right move one place to left and 20 becomes current item before next iteration. Similarly after 2 is removed, 6 becomes current item and escapes condition for removal.

The answer to this strange situation is using list comprehension

Example: Remove List Items using List Comprehension
mylist=[5,3,7,8,20,15,2,6,10,1] mylist=[i for i in mylist if i%2!=0] print(mylist)
Output
[5, 3, 7, 15, 1]

We can also use built-in filter() function. First argument is a function itself which is applied to each item in list and returns an iterator containing those items of list for which argument function evaluates to true.

Example:Remove List Items using filter()
mylist=[5,3,7,8,20,15,2,6,10,1] mylist=list(filter(lambda x:x%2!=0, mylist)) print (mylist)
Output
[5, 3, 7, 15, 1]

Another way is to use filterfalse() function defined in itertools module.

Example: Remove Items using filterfalse()
from itertools import filterfalse mylist=[5,3,7,8,20,15,2,6,10,1] def iseven(i): if i%2==0: return i mylist=list(filterfalse(iseven, mylist)) print (mylist)
Output
[5, 3, 7, 15, 1]