The for loop just generates an index to iterate the list. You are modifying the list inside the loop so it will not give the correct result.
Lets say you have a list with len = 10
numbers = [0,1,2,3,4,5,6,7,8,9]
and you run this loop
for number in numbers:
if number < 2:
numbers.remove(number)
in the first iteration, the index will be 0, numbers will be [0,1,2,3,4,5,6,7,8,9] and it will remove numbers[0] = 0
On the second iteration the index will be 1, and the numbers list will be [1,2,3,4,5,6,7,8,9] because we removed the first element on the last loop, it will now remove numbers[1] = 2
And so on.
Best way to do what you want is to use a list comprehesion:
numbers = [x for x in numbers if len(str(number)) > 2]