Задачка или глюк Pythona - Общение Python мододелов
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Задачка или глюк Pythona

Регистрация
29 Авг 2013
Сообщения
64
Репутация
0
Спасибо
0
Монет
0
следующий код выводит на экран 1 3 5 7 9 и [2, 4, 6, 8]

почему проходы совершились не по всем элементам списка и почему сохранились четные цифры в списке??????????????????



a = [1, 2, 3, 4, 5, 6, 7, 8, 9]



for j in a:



print(j)



a.remove(j)







print(a)
 
Регистрация
29 Янв 2013
Сообщения
69
Репутация
0
Спасибо
0
Монет
0
Это концептуальная ошибка, а не именно питона, где угодно если ты удаляешь элементы списка, пока итерируешься по нему, ты будешь пропускать элементы. Решения два, либо переписать логику на "добавлять нужные элементы в новый список, а ненужные не добавлять", а потом заменить этим списком старый, либо итерироваться по копии списка, и изменять сразу исходный
 
Регистрация
17 Авг 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
не удаляй ничего из контейнера, по которому итерируешься
если нужно, сделай копию, в данном случае можно просто ничего не удалять и опустошить массив после цикла
поведение возникает из-за того, что итератор по массиву после его модификации инвалидируется и указывает уже не на тот элемент, что до удаления
 
Регистрация
4 Июл 2013
Сообщения
54
Репутация
0
Спасибо
0
Монет
0
У тебя по индексам цикл идет.
Печатаешь индекс 0 (это число 1)
1
удаляешь
теперь индекс у тебя равен 1, но массив сдвинулся, поэтому через двойку мы перескакиваем, печатаем следующее число: 3
3

и т.д.
 
Сверху Снизу