Курс 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. Изменение элемента списка
  2. Работа с defaultdictами в Python
  3. Замена текста в Python
  4. TypedDict для kwargs в Python 3.12
  5. Генераторы списков
  6. Печать списка с помощью метода join
  7. Измерение времени выполнения кода с помощью time
  8. Логический оператор «and» в Python
  9. Обратный список чисел
  10. Обработка исключений в Python
  11. 9 уловок для чистого кода
  12. None в Python: использование и особенности
  13. Комментарии в Python
  14. Работа с zip()
  15. Основы работы со строками в Python
  16. Логирование с Logzero
  17. CLI-инструмент howdoi
  18. Функция sleep() в Python
  19. Принципы программирования
  20. Оболочка Python
  21. Генераторы списков в Python
  22. Частичное применение функций в Python
  23. Декоратор защиты анонимных пользователей
  24. Модуль pprint
  25. Освобождение памяти в Python
  26. Генератор надежных паролей
  27. Декораторы классов
  28. Гибкие функции Python
  29. Описание скриптов в README
  30. Подписка на @SelectelNews
  31. Работа с *args и **kwargs в Python
  32. Работа с SQLite в Python
  33. Проверка типа данных
  34. Отладка производительности Python
  35. Протокол управления контекстом
  36. Декораторы с аргументами в Python
  37. Модуль subprocess: запуск внешних команд
  38. Генератор бросков кубиков
  39. Декодирование байтов в строку
  40. Работа со стеком в Python
  41. Метод join() для объединения элементов строки
  42. Проверка класса объекта
  43. Сортировка с помощью key
  44. Сложение матриц в NumPy
  45. Преобразование PowerPoint в PDF.
  46. Создание класса в Python
  47. Установка Python3.7 и PIP
  48. Передача неизвестных аргументов в Python.
  49. Функциональное программирование.

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