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[:]делает удаление безопасным? - →Как включение вообще избегает изменения списка?