Влияние удаления элементов на список во время его обхода

После цикла numbers будет равен [2, 5, 11, 111, 7, 27]. Удаление 1 сдвигает 2 на уже пройденную позицию, поэтому цикл его пропускает.

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

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

После цикла numbers будет равен [2, 5, 11, 111, 7, 27]. Удаление 1 сдвигает 2 на уже пройденную позицию, поэтому цикл его пропускает.

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

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

Условие

Как изменится список numbers после выполнения цикла, в котором элементы удаляются во время прохода по самому списку.

numbers = [1, 2, 5, 11, 3, 111, 7, 27]

for i in numbers:
    if i < 5:
        numbers.remove(i)

print(numbers)

Ответ

После цикла numbers будет равен [2, 5, 11, 111, 7, 27]. Удаление 1 сдвигает 2 на уже пройденную позицию, поэтому цикл его пропускает.

Позже проверяется и удаляется 3; оставшиеся значения не удовлетворяют условию удаления. Чтобы гарантированно убрать все числа меньше 5, отфильтруйте список:

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

Срезовое присваивание сохраняет идентичность исходного списка, что важно при наличии других ссылок. Результат фильтрации здесь будет [5, 11, 111, 7, 27]. Вариант numbers = ... создаёт привязку к новому списку.

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

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

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

Подробнее