Курс 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. Работа с файлами в Python
  3. Возвращение нескольких значений
  4. Применение функций в Python
  5. Создание именованных кортежей в Python
  6. Документация функции help() в Python
  7. Работа с байтовыми строками в Python
  8. Импорт модуля из другого каталога
  9. Метод join() с набором
  10. Использование super() в Python
  11. Блок else в Python
  12. Удаление специальных символов с помощью re.sub
  13. Цепные операции в Python
  14. kwargs в Python
  15. Комментарии в Python.
  16. Объединение объектов в Python
  17. Представление бесконечности в Python
  18. Основные операции с библиотекой Numpy
  19. Изменение элемента списка
  20. Использование defaultdict в Python
  21. Декораторы с аргументами
  22. Работа с множествами в Python
  23. Хеширование паролей с использованием salt
  24. Настройка вывода в Numpy
  25. Тип данных TypeVarTuple
  26. Метод pop() списка
  27. Комментарии в Python
  28. Импорт с альтернативным именем
  29. Разделение строки на пары ключ-значение.
  30. Многоточие в Python
  31. Библиотека sh: удобные команды терминала
  32. Игра «Угадывание чисел»
  33. Склеивание строк без циклов
  34. Создание спинбокса в tkinter
  35. Управление ресурсами с контекстными менеджерами
  36. Работа с collections в Python.
  37. Форматирование данных с помощью pprint
  38. Построение графиков в Matplotlib
  39. Работа с комбинациями в Python.
  40. Оператор in для Python
  41. Создание панели меню Tkinter
  42. Оптимизация памяти с __slots__
  43. Функции all и any в Python
  44. Список методов и атрибутов
  45. Работа с временем в Python
  46. Python 3.12: Псевдонимы типов
  47. Циклы for в Python
  48. Именованные аргументы в Python

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