Курс 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. Регистрация на курсы SF Education
  3. Python Enum Weekday Usage
  4. Сумма элементов списка
  5. Основы работы с os
  6. Печать комбинаций в Python с Itertools
  7. Работа с JSON в Python
  8. Объединение Python и Shell
  9. Работа с итераторами в Python
  10. Функция sleep() в Python
  11. Новшества Flask 2.0
  12. Логические операторы в Python
  13. Сортировка с помощью key
  14. Итерация по коллекции в Python
  15. Преобразование списков в словарь
  16. Упрощение условных выражений с тернарным оператором
  17. Создание уникального проекта
  18. Особенности множеств в Python
  19. Библиотека sh: использование команд bash в Python
  20. Метод enumerate() в Python
  21. Создание веб-приложения с Flask
  22. Функция map() и ленивая оценка
  23. Поиск наиболее частого элемента
  24. Динамическая типизация в Python
  25. Работа с буфером обмена на Python
  26. Метод __call__ в Python
  27. Метод join() для объединения элементов
  28. Функция zip() для объединения списков
  29. Работа с файлами и директориями в Python.
  30. Управление сессиями в Python
  31. Изменение элемента списка
  32. Метод clear для коллекций
  33. Модуль math: основные функции
  34. Пустой оператор pass в Python
  35. Работа с итераторами в Python
  36. Python Менеджер контекста
  37. Возврат нескольких значений
  38. Поиск подстроки в строке
  39. Управление асинхронными задачами на Python.
  40. Обработка исключений в Python
  41. Получение списка файлов в директории с использованием os
  42. Определение локальных переменных в Python
  43. ChainMap избыточные ключи
  44. Numpy: разбиение массивов
  45. Поиск HTML-элементов с BeautifulSoup

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