Назад к вопросам
MiddleДебаггингРедко
Почему удаление элементов при итерации пропускает их?
Это пытается выбросить чётные числа, но молча пропускает некоторые элементы.
nums = [1, 2, 3, 4, 5, 6]
for n in nums:
if n % 2 == 0:
nums.remove(n)
print(nums)Найдите и исправьте ошибку.
Удаление элементов при итерации сдвигает индексы под итератором, поэтому он пропускает элементы. Никогда не изменяйте список, по которому идёте. Решение: итерировать копию (for n in nums[:]:) или пересобрать включением: nums = [n for n in nums if n % 2].
- Считать, что удаление оставляет итератор на следующем элементе
- Ожидать RuntimeError на
remove(он про изменение размера, но индексы всё равно сдвигаются) - Изменять список на месте вместо итерации копии или пересборки
- Почему итерация по
nums[:]делает удаление безопасным? - Как включение вообще избегает изменения списка?