Курс 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. Преобразование документов в PDF с помощью Spire.Office
  2. Метод lt для сортировки объектов
  3. Оформление текста в консоли с TermColor
  4. Оператор объединения словарей
  5. Присвоение значений переменным в Python
  6. Python enumerate() использование
  7. Получение ID процесса
  8. Проблема сравнения словарей
  9. Управление контекстом выполнения
  10. Python: отсутствие точек с запятыми
  11. Упрощенный вывод данных в Python
  12. Работа с collections.Counter
  13. Метод count в Python: почему count(», ») возвращает 4?
  14. Печать месячного календаря
  15. Определение основы слова с showballstemmer
  16. Форматирование чисел в Python
  17. Преобразование числа в список цифр
  18. Функция __init__ в Python
  19. Метод matmul для умножения матриц
  20. Основы работы с os
  21. Переопределение метода xor в Python
  22. Объединение словарей в Python
  23. Описание скриптов в README
  24. Подробная информация о %pinfo
  25. Аннотации типов в Python
  26. Проверка версии Python
  27. Numpy: объединение массивов
  28. Создание задания в Cron
  29. Итерация по копии коллекции
  30. Бинарный поиск
  31. Замена элементов в списке с помощью генераторов списков
  32. Установка и использование howdoi
  33. Работа с классами данных
  34. Генерация строк с .join()
  35. Логический оператор «and» в Python
  36. Python: цикл for и оператор присваивания
  37. Поиск уникальных и повторяющихся элементов
  38. Расчет времени выполнения
  39. Обезопасьте ввод данных
  40. PrettyTable: создание таблицы
  41. Списки: объединение, изменение
  42. Форматирование данных с помощью pprint
  43. Генераторы данных
  44. Отображение графиков в Jupyter с Matplotlib
  45. Операции со строками в Python
  46. Группировка элементов Python
  47. Изменение элемента списка

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