Курс 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. Оператор is в Python
  3. Область видимости переменных
  4. Измерение времени выполнения кода с использованием time
  5. Функция zip() для объединения списков
  6. Регистрация на TenChat
  7. Создание и обучение модели с Keras
  8. Логирование с Logzero
  9. Форматирование строк с f-строками
  10. Подсчет элементов в Python
  11. Слияние словарей в Python 3.9
  12. Python Поверхностное Копирование
  13. Перегрузка операторов в Python
  14. Поиск подстроки в строке
  15. Основы слова
  16. Определение наиболее частого элемента с помощью collections.Counter
  17. Создание файла с проверкой ошибки
  18. Освобождение памяти в Python
  19. Работа с CSV файлами в Python
  20. Генератор списка с условием if
  21. Введение в PyTorch
  22. Определение основы слова с showballstemmer
  23. Создание графики с черепахой
  24. globals и locals
  25. Работа с комплексными числами
  26. JMESPath в Python
  27. Проверка строки на палиндром
  28. Списковые включения в Python
  29. Управление сессиями в Python
  30. Создание функций с произвольным количеством аргументов
  31. Работа с файлами в Python
  32. Строковое представление объектов
  33. Условное добавление элементов в список
  34. Разделение строки на пары ключ-значение.
  35. Порядок и длина множеств в Python
  36. Функция enumerate() в Python
  37. Генерация UUID в Python
  38. Удаление falsy-значений из списка с помощью filter
  39. Наследование в программировании
  40. Ограничение ресурсов в Python
  41. Изменение IP-адреса в Python
  42. Многострочные строки в Python
  43. Управление виртуальными окружениями в Python
  44. Получение локальных переменных в Python
  45. EMOT преобразование эмодзи в текст
  46. Расчет времени выполнения

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