Что выведет код Middle Коллекции обновлено

Удаление из списка в цикле

Вопрос

Что выведет код? По строке на каждый print.

nums = [1, 2, 2, 3, 4, 4]
for n in nums:
    if n % 2 == 0:
        nums.remove(n)
print(nums)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [1, 2, 3, 4]. Итератор списка идёт по индексу.

Что выведет

[1, 2, 3, 4]

Разбор

Итератор списка идёт по индексу. Удаление элемента сдвигает хвост влево, и следующий элемент пропускается. На индексе 1 встретили 2 и удалили его, на место встала вторая 2, но итератор перешёл к индексу 2 (3). Затем 4 на индексе 3 удалена, вторая 4 сдвинулась на её место и снова пропущена. Остаётся [1, 2, 3, 4]. Правильно: nums = [n for n in nums if n % 2].

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.