Курс 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. Блок else в циклах Python
  3. Работа с файлами в Python
  4. Необязательные аргументы в Python
  5. Оператор @ для умножения матриц
  6. Генераторы и сеты в Python
  7. Измерение времени выполнения с помощью time
  8. Подсчет элементов с помощью Counter из collections
  9. Регулярные выражения в Python
  10. Печать календаря в Python
  11. Объединение списков в строку
  12. Библиотека Rich: форматирование текста
  13. Глобальные переменные в Python
  14. Проверка ввода с помощью isdigit
  15. Оператор in в Python
  16. Работа со строками в Python
  17. Удаление дубликатов с помощью множеств
  18. Объединение множеств в Python
  19. Избегайте изменяемых аргументов
  20. Регистрация на курсы SF Education
  21. Переменная Шредингера
  22. PUT запрос для обновления данных
  23. Виртуальные среды в Python
  24. Оператор «or» в Python
  25. Классы данных в Python
  26. Создание новой даты в Python
  27. Переопределение метода
  28. Повторение элементов в Python
  29. Использование defaultdict в Python
  30. Определение имен функций
  31. Объединение кортежей в Python
  32. Работа с контекстными менеджерами
  33. Лямбда-функции в Python
  34. Разбиение текста в Python
  35. Метод count в Python: почему count(», ») возвращает 4?
  36. Генерация QR-кодов с библиотекой qrcode
  37. Лямбда-функции в цикле
  38. Работа с f-строками 2.0
  39. Оператор Walrus в Python 3.8
  40. Список переменных в Python
  41. Форматирование строк с % в Python
  42. Роль ключевого слова self
  43. Фильтрация данных в Python.
  44. Вычисление фазы комплексного числа
  45. Типы возвращаемых значений в Python
  46. Python: Фильтрация списков с помощью filter()
  47. Генерация ключей RSA
  48. Методы Python для работы с данными

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