В вашем коде 2 проблемы:
- Вы напрямую изменили список , по которому вы повторяете - это всегда опасно .
- Другие ответы объяснили вам, почему
False == 0
это True
.
Я внес как можно меньше изменений в ваш код, чтобы исправить эти проблемы:
Я создал новый пустой массив и вместо удаления «плохих» элементов из исходного списка добавил «хорошие» к этому новому массиву.
Я тестировал и текущий элемент для его типа.
def move_zeros(array):
count=0
new_array = []
for num in array:
if num == 0 and type(num) is int:
count +=1
else:
new_array.append(num)
return new_array + [0]*count
Тест:
move_zeros([False,1,2,0,1,0,1,0,3,0,1])
[False, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0]