Какой результат выведет программа при удалении элементов списка во время его обхода?

Будет напечатано [2, 5, 11, 111, 7, 27]. Удаление сдвигает элементы, из-за чего число 2 пропускается итератором.

Короткий ответ

Что ответить на собеседовании

Будет напечатано [2, 5, 11, 111, 7, 27]. Удаление сдвигает элементы, из-за чего число 2 пропускается итератором.

Подробный разбор

Ответ с пояснениями

Условие

Какой вывод появится в консоли после выполнения следующего кода? Пример демонстрирует удаление элементов из списка во время его перебора.

numbers = [1, 2, 5, 11, 3, 111, 7, 27]
for i in numbers:
    if i < 5:
        numbers.remove(i)
print(numbers)

Ответ

Будет напечатано [2, 5, 11, 111, 7, 27]. Удаление сдвигает элементы, из-за чего число 2 пропускается итератором.

После удаления 1 число 2 сдвигается на индекс 0, но цикл уже переходит к следующему индексу и получает 5. Позже удаляется 3. Итератор не начинает обход заново после изменения списка.

Для удаления всех чисел меньше 5 безопаснее:

numbers[:] = [value for value in numbers if value >= 5]

Результат — [5, 11, 111, 7, 27]. Присваивание срезу сохраняет идентичность списка. Обычное numbers = [...] также отфильтрует значения, но создаст новый объект, что важно при наличии других ссылок. Линейная фильтрация эффективнее многократных поисков и удалений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее