Курс 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. Мониторинг работы программы Py-spy
  2. Оператор += для объединения строк
  3. Работа с часовыми поясами в Python.
  4. Модуль itertools: эффективная работа с итераторами
  5. Глобальные переменные в Python
  6. Улучшение читаемости кода в Python
  7. Счетчик в Python: most_common()
  8. Область видимости переменных в Python
  9. Pillow: работа с изображениями
  10. lru_cache оптимизация функций
  11. Работа с очередями в Python
  12. Python: отсутствие точек с запятыми
  13. Сложные типы данных в Python
  14. Декораторы в Python
  15. Сумма элементов списка
  16. Поиск частых элементов в списке
  17. Замыкания в Python
  18. Повторение элементов списков
  19. Хэш-функции в Python
  20. Асинхронное программирование с asyncio
  21. Извлечение данных из JSON
  22. Дефолтные параметры в Python
  23. Основы работы со строками в Python
  24. Проверка существования переменной с оператором :=
  25. Функции any() и all() в Python
  26. Оператор «or» в Python
  27. Измерение времени выполнения с помощью time
  28. Поиск индекса элемента
  29. Функции map, filter и reduce
  30. Явный импорт в Python
  31. Работа с каталогами в Python
  32. Форматирование чисел в Python
  33. Оболочка Python
  34. Применение функции к элементам списка
  35. Транспонирование матрицы
  36. Создание пользовательской коллекции в Python
  37. Определение имен функций
  38. Solidity для DeFi Ethereum
  39. Разбиение текста в Python
  40. Переопределение метода __or__()
  41. Работа с deque в Python
  42. Lambda Functions in Python
  43. Рекурсия для обращения строки
  44. Сортировка с помощью key
  45. Конвертация текстовых чисел с помощью Numerizer

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