Курс 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. Проектирование Singleton с метаклассом
  2. Создание словаря с значением по умолчанию
  3. Обработка исключений в Python
  4. Модуль math: константы π и e
  5. Списковый компрехеншен.
  6. Операции с кортежами
  7. Поиск наиболее частого элемента в списке
  8. Атрибуты класса и экземпляра в Python
  9. Получение ID процесса
  10. Перевернуть список в Python
  11. Вычисление натуральных логарифмов в NumPy
  12. Необязательные аргументы в Python
  13. Считывание бинарного файла в Python
  14. Оператор умножения для вектора
  15. Сортировка с помощью key
  16. Область видимости переменных
  17. Объединение словарей в Python
  18. Работа с *args и **kwargs в Python
  19. Манипуляция формой массива в Numpy
  20. Удаление URL-адресов в Python
  21. Избегайте двойного подчеркивания
  22. Измерение времени выполнения кода
  23. Проверка дубликатов в Python
  24. Сортировка HTML по CSS-селектору
  25. Получение частей дроби
  26. Получение атрибутов и методов класса
  27. Выход из профиля в Django
  28. Разделение строк методом split()
  29. Преобразование числа в список цифр
  30. Группы исключений в Python
  31. Многострочные комментарии в Python
  32. Курс Data Scientist в медицине
  33. Разделение строки в Python
  34. Настройка Cron
  35. Вакансии в Nebius
  36. Встраивание HTML в Jupyter Notebook
  37. Аннотации типов в Python
  38. Переопределение унарных операторов
  39. Парсинг веб-страниц с Beautiful Soup
  40. Тестирование с unittest
  41. Обработка ошибок в JSON данных
  42. Метод __getitem__ в Python
  43. Операции с числами в Python
  44. Применение функции map() в Python
  45. Метод __int__ в Python

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