Курс 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. Удаление URL-адресов в Python
  2. Комплексные числа в Python
  3. Определение функций с необязательными аргументами
  4. Библиотека Chartify: руководство
  5. Обмен переменными в Jupyter
  6. Ускорение выполнения кода в Python
  7. Профилирование кода на Python
  8. Декоратор total_ordering для класса Point
  9. Получение атрибутов и методов класса
  10. Кортеж в Python: создание, доступ, изменение
  11. Работа с путями в Python
  12. Хеши в Python
  13. Измерение потребления памяти при сортировке
  14. Проектирование Singleton с метаклассом
  15. Генераторы списков
  16. Переворот строки
  17. Модуль array: создание и использование массивов
  18. Каналы Senior: Python, Java, Frontend, SQL, C++
  19. Отрицательные индексы списков в Python
  20. Блок else в циклах Python
  21. Основы работы со списками
  22. Управление асинхронными задачами на Python.
  23. Лямбда-функции в defaultdict
  24. Функция __init__ в Python
  25. Особенности запятых в Python
  26. Функция map() и ленивая оценка
  27. Работа с кортежами
  28. Делегирование в Python
  29. Преобразование строк в числа с плавающей запятой
  30. Декораторы в Python
  31. Константы в модуле cmath
  32. Цикл while в Python
  33. Необязательные аргументы в Python
  34. Объединение строк с помощью метода join
  35. Установка Python3.7 и PIP
  36. Округление чисел с помощью round
  37. Копирование словарей и списков в Python
  38. Установка Python — Простое руководство
  39. Оптимизация интернирования строк
  40. Избегание циклических зависимостей классов в Python
  41. Переопределение метода __rshift__
  42. Передача аргументов через **arguments
  43. F-строки в Python
  44. Оптимизация строк в Python

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