Курс 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. Настройка Cron
  2. Удаление пробелов методом translate()
  3. Метод classmethod
  4. Объединение списков в Python.
  5. Преобразование текста в нижний регистр
  6. Получение значений из словарей
  7. Выход из профиля в Django
  8. Метод setdefault() в Python
  9. Работа со строками в Python
  10. Обработка исключений в Python
  11. Модуль subprocess: запуск внешних команд
  12. Работа с массивами в Numpy
  13. Получение текущей даты в Python
  14. Конкатенация строк с методом join()
  15. Установка и использование модуля Wikipedia
  16. Python defaultdict добавление ключа
  17. Фильтры Pillow: NEAREST, BILINEAR, BICUBIC
  18. Новшества Flask 2.0
  19. Основные функции и модули Python
  20. Функции range() в Python
  21. Подсказки при вводе данных в Python
  22. Отправка HTTP-запросов с User-Agent
  23. Тайное преобразование типа ключа
  24. Работа с defaultdictами в Python
  25. Поиск уникальных и повторяющихся элементов
  26. Документирование функций в Python
  27. Форматирование даты с strftime()
  28. Переопределение оператора % для объектов
  29. Проверка существования переменной с оператором :=
  30. Разделение строк методом split()
  31. Аннотации типов в Python
  32. Получение обратного списка чисел
  33. Округление дробей в Python
  34. Работа с itertools
  35. Библиотека Emoji: использование смайлов в Python
  36. Секреты Python
  37. Логирование с Loguru
  38. Оператор «or» в Python
  39. Эффективная конкатенация строк с использованием join()
  40. Моржовый оператор в Python 3.8
  41. Поиск наиболее частого элемента списке
  42. Форматирование объектов с модулем pprint
  43. Профилирование данных с Pandas

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