Курс 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. Библиотека schedule: планировщик задач
  3. Именованные аргументы в Python
  4. Метод getitem для доступа к элементам последовательности
  5. Удаление файлов и папок в Python
  6. Отображение HTML кода в Python
  7. Оптимизация гиперпараметров с Scikit Optimize
  8. Область видимости переменных
  9. Срез списка в Python
  10. Преобразование букв в нижний регистр
  11. Объединение словарей в Python
  12. Работа с пользовательским вводом
  13. Глубокое копирование объектов
  14. Преобразование в float
  15. Добавление Progressbar в Python
  16. Генераторы по генератору
  17. Оператор is в Python
  18. Работа с изменяемыми списками
  19. CSV строка разделение в Python
  20. Основы работы с базами данных в Python
  21. Метод eq для сравнения объектов
  22. Особенности запятых в Python
  23. Создание словарей в Python
  24. Особенности множеств в Python
  25. Сортировка и разворот списка
  26. Отрицательные индексы списков
  27. Асинхронное программирование с asyncio
  28. Именованные кортежи в Python
  29. Избегание изменяемых аргументов
  30. Принципы программирования
  31. Управление пакетами с pip
  32. Python Метод del.
  33. Работа с временем в Python
  34. Работа с географическими данными.
  35. Оператор Walrus в Python
  36. Декоратор для группы пользователей в Django
  37. Метод join() для объединения элементов строки
  38. Управление сессиями в Python
  39. Создание именованных кортежей в Python
  40. globals и locals
  41. Форматирование строк в Python
  42. Удаление ссылок в Python
  43. Генерация ключей RSA
  44. Python groupby() из itertools: работа с повторяющимися элементами
  45. Курс по дообучению ChatGPT
  46. Счетчик в Python: most_common()

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