Есть xs = [1, 2, 3] и it = iter(xs). Сначала выполняется a = list(it), а затем b = list(it). Чему равно b?

AПустой список []
BСписок [1, 2, 3]
CИсключение TypeError
DИсключение StopIteration
Правильный ответ. После прохода по итератору он считается исчерпанным: следующее преобразование к списку даст пустой список.

Разбор

iter(xs) создаёт одноразовый итератор: list(it) сразу обходит его до конца и собирает все элементы в a. После этого внутренний указатель уже стоит «за концом», поэтому повторный list(it) ничего не получает и возвращает пустой []. Итератор не «перематывается» автоматически — для нового прохода нужен новый iter(xs). Никакого TypeError или необработанного StopIteration тут не возникает: list() сам корректно обрабатывает конец итерации.

Проверь себя · 1/3разбор после ответа
Есть xs = [1, 2, 3] и it = iter(xs). Сначала выполняется a = list(it), а затем b = list(it). Чему равно b?
Тренировать Python в Telegram

Ещё вопросы по теме «Итераторы и генераторы»