Курс Python → Удаление элементов во время итерации

При удалении элемента списка во время итерации возникает интересное поведение, которое может привести к неожиданным результатам. Рассмотрим пример с двумя списками: list_2 и list_4. После удаления элемента 1 из list_2 или list_4, содержимое списков становится [2, 3, 4]. Это связано с тем, что при удалении элемента остальные сдвигаются, изменяя свои индексы. Например, элемент 2 теперь имеет индекс 0, а элемент 3 — индекс 1.

При выполнении итерации по списку Python просматривает элементы по их индексам. Если в процессе итерации был удален элемент, то следующий элемент уже имеет другой индекс. В случае с list_2 и list_4, после удаления элемента 1, элемент 2 был смещен на индекс 0, и когда итерация смотрит на индекс 1, она пропускает элемент 2, так как он теперь находится на индексе 0.

Это приводит к тому, что при удалении элементов во время итерации можно получить неожиданный результат, когда некоторые элементы будут пропущены. Для избежания подобных ситуаций рекомендуется создавать новый список с элементами, которые нужно удалить, и затем производить удаление после завершения итерации по исходному списку.

list_2 = [1, 2, 3, 4]
for i in list_2[:]:
    if i % 2 == 0:
        list_2.remove(i)
print(list_2)

Для более наглядного примера приведем код, который удалит все четные числа из списка list_2. Здесь мы используем срез [:], чтобы скопировать весь список итерироваться по копии, чтобы избежать проблем с изменением индексов элементов в оригинальном списке. После завершения итерации мы получаем список [1, 3], так как удалены все четные числа.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Многопоточность и асинхронное программирование в Python
  2. Вывод сложных структур данных с помощью pprint
  3. Запуск внешнего кода в Jupyter
  4. Работа с географическими данными.
  5. Метод __irshift__ для Python
  6. Декораторы в Python
  7. Форматирование данных с помощью pprint
  8. Иерархия классов в Python
  9. Печать комбинаций в Python с Itertools
  10. Работа с модулем bisect
  11. Управление контекстом выполнения кода
  12. Решатель судоку на Python с pygame
  13. Расчет времени выполнения
  14. Объединение коллекций в Python
  15. Проблема с изменяемыми аргументами
  16. Декодирование строк в Python
  17. Выборка чисел
  18. Атрибуты массивов в Numpy
  19. Генератор бросков кубиков
  20. Управление памятью в Python
  21. Проверка версии Python
  22. Сортировка HTML-элементов
  23. Создание Telegram-бота на Python
  24. Оператор «not» в Python
  25. Поиск простых чисел
  26. Срез списка в Python
  27. Функциональное программирование.
  28. Установка и использование Logzero
  29. Повторение элементов в Python
  30. Метаклассы в Python
  31. Функция enumerate в Python
  32. TypedDict для kwargs в Python 3.12
  33. Поиск наиболее частого элемента списке
  34. Форматирование объектов с модулем pprint
  35. Оператор continue в Python
  36. Генераторы в Python
  37. Форматирование даты с strftime()
  38. Метод join() для объединения элементов строки
  39. Работа с файловой системой в Python
  40. Исправление ошибки NameError
  41. Нахождение разницы между списками в Python
  42. Операторы увеличения и уменьшения переменной
  43. Поиск наиболее частого элемента
  44. Сортировка в Python

Marketello читают маркетологи из крутых компаний