Курс 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. Замена текста с re.sub()
  2. Хеширование паролей с солью
  3. Метод splitlines() для разделения строк
  4. Функция findall() для поиска вхождений строки
  5. JSON-esque в Python
  6. Создание уникального проекта
  7. Работа с комплексными числами
  8. Мощь вложенных функций в Python
  9. Поиск индексов в списке
  10. Установка и использование модуля Wikipedia
  11. Создание новых списков через list comprehensions
  12. Измерение времени выполнения в Python
  13. Избегание циклических зависимостей классов в Python
  14. Списки в Python: синтаксис представления
  15. Создание панели меню Tkinter
  16. Использование эмодзи в Python
  17. Оператор Walrus в Python
  18. Работа с deque в Python
  19. Комментарии в Python
  20. CSV строка разделение в Python
  21. Создание комплексных чисел
  22. Работа с Path в Python
  23. Изменение регистра данных
  24. Декораторы с аргументами
  25. Лямбда-функции в Python
  26. Перевод текста с Python Translator
  27. Непрерывная проверка в Python
  28. Порядок и длина множеств в Python
  29. Генерация QR-кодов с библиотекой qrcode
  30. Стать Python-разработчиком
  31. Управление пакетами с pip
  32. Оптимизация сравнения в Python
  33. Разделение списка на гнппы
  34. Область видимости переменных
  35. Создание словарей в Python
  36. Поиск с помощью регулярных выражений
  37. Создание таблиц в Python с PrettyTable
  38. Делегирование в Python
  39. Метод join() для объединения элементов
  40. Проверка версии Python
  41. Функции-генераторы в Python
  42. Операторы присваивания в Python
  43. Работа с модулем Calendar
  44. Управление User-Agent в Python
  45. Функция all() в Python
  46. Профилирование данных с Pandas.
  47. Итераторы в Python
  48. Мониторинг работы программы Py-spy

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