Python Python Collections (2016, retired 2019) Lists Removing items from a list

Jacob Keeley
Jacob Keeley
2,033 Points

Why isn't .remove() deleting lists?

When I try to complete Task 2 of Removing Items from a List using the code below, Python outputs [1, 2, 3, [1, 2, 3]]. Why does the list within the list remain?

messy_list = ["a", 2, 3, 1, False, [1, 2, 3]]

messy_list.insert(0, messy_list.pop(3))

for item in messy_list:
    if type(item) != int:
        messy_list.remove(item)
    else:
        continue

1 Answer

Steven Parker
Steven Parker
170,248 Points

This issue occurs when an iterable is altered while being used to control a loop. Disturbing the item order can cause items to be skipped over.

To prevent this, use a copy of the iterable for the loop (using the "copy" method or a slice with no arguments).