Курс 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. Класс Counter() для подсчета элементов
  2. Решение переменной Шредингера
  3. Объединение словарей в Python
  4. Печать календаря
  5. Тестирование времени с Freezegun
  6. Установка random seed в Python
  7. Форматирование строк в Python
  8. Конкатенация строковых литералов
  9. Создание Telegram-бота на Python
  10. Установка библиотек в Python
  11. Роль запятой в Python
  12. Python enumerate() функции
  13. Избегайте использования goto
  14. Оператор Walrus: правильное использование
  15. Defaultdict в Python
  16. split() — разделение строки
  17. Базовые объекты Python
  18. Функция findall() для поиска вхождений строки
  19. Экспорт данных в файл.
  20. Метод __ilshift__ для битового сдвига влево
  21. Отправка POST-запроса в REST API
  22. Транспонирование матрицы в Python
  23. Пересечение списков с использованием множеств
  24. Генераторы в Python
  25. Статическая типизация в Python
  26. Удаление элементов из списка
  27. Фильтрация списков с itertools
  28. Работа со временем в Python
  29. Основы работы с os
  30. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  31. Считывание бинарного файла в Python
  32. Обновление и получение данных в SQLite
  33. Простой калькулятор Python
  34. Python: Splat-оператор и splatty-splat
  35. Функции в одну строку
  36. Имена объектов в Python
  37. Сложение матриц в NumPy
  38. Копирование объектов в Python
  39. Декодирование строк в Python
  40. Метод rlshift для битового сдвига
  41. Область видимости переменных
  42. Генерация фальшивых данных с Faker
  43. Модуль array: создание и использование массивов
  44. Блок try-except-else
  45. Генерация UUID в Python
  46. Хэш-функции и метод цепочек

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