Курс 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. Проверка файла .py на синтаксис.
  3. Методы HTTP запросов в Flask
  4. %pinfo: получение информации об объекте
  5. Фильтрация входных данных в Python
  6. Частичное применение функций в Python
  7. Расширение информации об ошибке в Python
  8. Функция format() в Python
  9. Игра Виселица на Python
  10. Удаление ссылок в Python
  11. Идентификатор объекта в Python
  12. Функциональное программирование.
  13. Частичное совпадение ввода
  14. inspect в Python: анализ кода
  15. Использование эмодзи в Python
  16. Определение локальных переменных в Python
  17. Декоратор total_ordering для сравнения объектов
  18. Модуль xkcd: добавление юмора в Python
  19. Обрезка изображения с Pillow
  20. Удаление элемента по индексу
  21. Установка переменной среды в Python
  22. Retrying в Python: повторные вызовы
  23. Управление ресурсами в Python
  24. Метод rsub в Python: расширение функциональности вычитания
  25. Оператор «is not» в Python
  26. Прокачанный трейсинг ошибок
  27. Именованные кортежи в Python
  28. Замена текста в Python
  29. Итераторы в Python
  30. Декораторы в Python
  31. Модуль inspect
  32. Работа с collections.Counter
  33. Работа с парами ключ-значение
  34. Удаление дубликатов из списка
  35. Явный импорт в Python
  36. Установка и обучение ChatterBot
  37. Метод difference_update() — разность множеств
  38. Упрощение работы с JSON-данными в Python
  39. Оптимизация памяти с __slots__
  40. Создание задания в Cron
  41. Операторы Splat и splatty-splat
  42. Декораторы в Python
  43. Работа с очередями в Python
  44. Удаление первого элемента списка
  45. Удаление ключа из словаря в Python
  46. Распаковка аргументов в Python
  47. Добавление вложенных списков

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