Курс 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"
- Использование super() в Python
- Склеивание строк через метод join()
- Генераторы данных
- Пропуск начальных строк с помощью dropwhile()
- Работа с срезами в Python
- Копирование файлов с shutil()
- Рекурсия для обращения строки
- Разработка Telegram-ботов
- Counter() — подсчет элементов
- Зарезервированные слова в Python
- Оператор Walrus: правильное использование
- Работа с контекст-менеджером «with»
- Работа с YAML в Python
- Удаление символа из строки
- Исключение NotImplementedError
- Модуль antigravity: генерация координат
- Блок else в циклах.
- Метод get для словарей
- Progress с библиотекой tqdm
- Функции any() и all() в Python
- Поиск индексов в списке
- Работа с прокси в Python
- Проверка версии Python
- Подчеркивание в REPL
- Разность множеств
- Лямбда-функции в Python
- Работа с комплексными числами
- Python OrderedDict и fromkeys() — работа с словарями
- GitHub в Telegram: подписка на уведомления
- Безопасные SQL-запросы в Python 3.11
- Работа с Requests для HTTP-запросов
- Вывод переменной и строки в Python
- Обработка ошибок в JSON данных
- Импорт в Python: список all
- Конкатенация строковых литералов
- Принципы SRP и OCP
- Логические операторы в Python
- Метод clear для коллекций
- Работа с множествами в Python
- Перегрузка операторов в Python
- Создание веб-приложения с Flask
- Замена переменных в Python
- Преобразование строки в число
- Нахождение максимального значения и его индекса в списке
- Работа с модулем Calendar















