Результат — [2, 5, 11, 111, 7, 27]. После удаления элемента список сдвигается, но индекс итератора продолжает расти, поэтому некоторые элементы пропускаются; число 2 останется.
Удаление элементов списка во время прохода по нему
Результат — [2, 5, 11, 111, 7, 27]. После удаления элемента список сдвигается, но индекс итератора продолжает расти, поэтому некоторые элементы пропускаются; число 2 останется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Проанализируйте, что происходит в приведённом фрагменте кода, когда из списка удаляют элементы во время его итерации с помощью цикла for.
nums = [1, 2, 5, 11, 3, 111, 7, 27]
for val in nums:
if val < 5:
nums.remove(val)
print(nums)
Ответ
Результат — [2, 5, 11, 111, 7, 27]. После удаления элемента список сдвигается, но индекс итератора продолжает расти, поэтому некоторые элементы пропускаются; число 2 останется.
Сначала удаляется 1, и 2 переезжает на индекс 0, который итератор уже прошёл. Позже удаляется 3, после чего пропускается 111, но он и так не подлежит удалению. Безопаснее фильтровать отдельно:
nums = [value for value in nums if value >= 5]
Если нужно сохранить тот же объект списка для других ссылок, используйте nums[:] = [value for value in nums if value >= 5].