Курс 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. Создание новых функций через partial
  2. Генераторы и сеты в Python
  3. Измерение времени выполнения
  4. Склеивание строк без циклов
  5. Измерение времени выполнения в Python
  6. Протокол управления контекстом
  7. Преобразование документов в PDF с помощью Spire.Office
  8. Оптимизация памяти в Python
  9. Конкатенация строк с помощью join()
  10. Удаление дубликатов в pandas
  11. Протокол управления контекстом
  12. Глобальные переменные в Python
  13. Метод rpow в Python
  14. Раздувающийся словарь в Python
  15. Анонимные функции Lambda
  16. Декоратор для группы пользователей в Django
  17. Генератор надежных паролей
  18. Инверсия списка и строки
  19. Работа с argparse
  20. Конкатенация строк с методом join()
  21. Создание namedtuple списком полей
  22. Игра «Камень, ножницы, бумага» — Python
  23. Работа со стеком в Python
  24. Создание копии итератора
  25. Наследование в программировании
  26. Создание и операции с дробями
  27. Итерация по коллекции в Python
  28. Экспорт функций в Python
  29. Работа с итераторами через срезы
  30. Глубокое копирование объектов
  31. Списки в Python: синтаксис представления
  32. Конкатенация строковых литералов
  33. Метод __complex__ в Python
  34. Работа с кортежами в Python
  35. Генерация QR-кодов с библиотекой qrcode
  36. Синхронизация доступа к ресурсам
  37. Функция с *args.
  38. Операции с массивами в NumPy
  39. Копирование объектов в Python
  40. Работа с итераторами в Python
  41. Работа с переменными в Python
  42. Объединение словарей в Python
  43. Эффективная конкатенация строк в Python
  44. Сложение матриц в NumPy
  45. Скрытие вывода данных
  46. Расчет времени выполнения кода
  47. Сортировка элементов с OrderedDict

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