Курс 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. Оператор zip в Python
  2. Импорт модулей в Python 3.12
  3. Поиск HTML-элементов с BeautifulSoup
  4. Декораторы в Python
  5. Профилирование кода на Python
  6. Управление ресурсами в Python
  7. Очистка строки в Python
  8. Методы shutil для работы с файлами
  9. Функция zip() в Python
  10. SciPy: широкий функционал для математических операций
  11. Инверсия списка и строки
  12. Работа с множествами в Python
  13. Список импортированных модулей в Python
  14. Метод remove() для удаления элемента из списка
  15. Новшества Flask 2.0
  16. Многоточие в Python
  17. Заказ карты Тинькофф Black
  18. Получение срезов итераторов
  19. Итерация по копии коллекции
  20. Python: отсутствие точек с запятыми
  21. Логические значения в Python
  22. Проверка условий: all и any
  23. Аннотации типов в Python
  24. Избегание изменяемых аргументов
  25. Преобразование данных в Python
  26. Создание новых списков
  27. Обмен значений переменных в Python
  28. Работа с множествами в Python
  29. Сравнение объектов в Python
  30. Библиотека wikipedia для Python
  31. Преобразование строк в числа в Python
  32. Метод bool() в Python
  33. Автоматизация действий с Pyautogui
  34. Удаление дубликатов из списка
  35. Измерение времени выполнения кода в Python
  36. Замена символов в Python
  37. Преобразование данных в Python
  38. Операции с матрицами в Python
  39. Передача словаря через **kwargs
  40. Выражения-генераторы в Python
  41. Многострочные комментарии в Python
  42. Метод matmul для умножения матриц
  43. Поиск индекса элемента
  44. Генераторы списков
  45. Python Ellipsis использование
  46. Прокачанный трейсинг ошибок

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