Курс 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. Обязательные аргументы в Python
  2. Логирование в Python
  3. Правила именования переменных
  4. Метод __float__ в Python
  5. Конвертация коллекций в Python.
  6. Метод __ilshift__ для битового сдвига влево
  7. Поиск шаблона в начале строки
  8. Работа с NumPy.linalg
  9. Python reversed() функция
  10. SciPy: широкий функционал для математических операций
  11. Импорт модулей в Python 3.12
  12. Метод matmul для умножения матриц
  13. Оператор is в Python
  14. Dict Comprehension в Python
  15. ChainMap избыточные ключи
  16. Обновление множества в Python
  17. Функция map() и ленивая оценка
  18. Красивый вывод списка
  19. Печать списка с помощью метода join
  20. Компиляция регулярных выражений
  21. Сравнение def и lambda функций в Python
  22. Тестирование функции сложения
  23. Форматирование заголовков в Python
  24. Работа с Path в Python
  25. Работа с WindowsPath()
  26. Разделение строки с помощью split()
  27. Генерация случайных данных в NumPy
  28. Сравнение неупорядоченных списков
  29. Преобразование текста в речь с Python
  30. OrderedDict — упорядоченный словарь
  31. Обход словаря в Python
  32. Итерация по коллекции в Python
  33. Автоматизация скриптов на AWS Lightsail.
  34. Преобразование Word в PDF с Spire.Doc
  35. Очистка строки в Python
  36. Импорт модулей в Python 3.12
  37. Генерация UUID в Python
  38. Импорт с альтернативным именем
  39. Создание спинбокса в tkinter
  40. Операторы присваивания в Python
  41. Работа с комплексными числами
  42. Переворот списка в Python
  43. Скачать видео с YouTube
  44. Измерение времени выполнения кода
  45. Enum в Python
  46. Список методов и атрибутов
  47. Декораторы для регистрации функций
  48. Реверс строки и списка в Python.

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