Курс 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. Цикл for в Python
  2. Разделение строки в Python
  3. Метод hash в Python
  4. Работа с дробями в Python
  5. Деление в Python
  6. Работа с датой и временем в Python
  7. Обход словаря в Python
  8. Извлечение чисел из текста
  9. Преобразование типов данных в set comprehension
  10. split() — разделение строки
  11. Работа с итераторами в Python
  12. Сортировка с помощью key
  13. Структура данных словарь в Python
  14. Python Тесты и Гайды
  15. Pretty-printing JSON в Python
  16. Транспонирование 2D-массива с помощью zip
  17. Фильтрация списка от «ложных» значений
  18. Сериализация объектов в Python
  19. Работа с кортежами в Python
  20. Фильтрация данных в Python.
  21. Генераторы данных
  22. Работа с комплексными числами
  23. Генераторные функции в Python
  24. Особенности ключей словаря в Python
  25. Закрытие файла в Python
  26. Списковое включение в Python
  27. Блок else в циклах.
  28. Применение функции map() с лямбда-функциями
  29. Поиск элементов BeautifulSoup
  30. Удаление символа из строки
  31. Лямбда-функции в Python
  32. Курсы Яндекс Практикум
  33. Генераторы в Python
  34. Методы и функции в Python
  35. Проверка вхождения подстроки
  36. Скрытие вывода данных
  37. lru_cache оптимизация функций
  38. Иерархия классов в Python
  39. Генерация QR-кодов с Python
  40. Работа со временем в Python
  41. Измерение времени выполнения кода
  42. Сортировка в Python
  43. Настройка шрифта и цвета в Tkinter
  44. Любовь к Python
  45. Создание GUI на Tkinter

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