Есть xs = [1, 2, 3] и it = iter(xs). Сначала выполняется a = list(it), а затем b = list(it). Чему равно b?
A
[]B
[1, 2, 3]CБудет выброшено исключение
TypeError.DБудет выброшено исключение
StopIteration.Правильный ответ. Итератор одноразовый: после полного прохода он исчерпан, повторная материализация даст пустой результат.
Разбор
Вызов list(it) последовательно берёт элементы через next(it) до конца. Когда элементы заканчиваются, внутри используется StopIteration, но наружу исключение не пробрасывается. Итератор остаётся в состоянии «конец», поэтому второй list(it) возвращает пустой список.
Проверь себя · 1/3разбор после ответа
Создали
g = (x for x in [1, 2, 3]), затем s1 = sum(g) и s2 = sum(g). Чему равно s2?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `it = iter(['a', 'b'])`. Что вернёт вызов `next(it)`?
- Дан генератор: `def gen(): print('A'); yield 1; print('B'); yield 2`. Сразу после `g = gen()` что будет выведено в консоль?
- Что создаёт выражение `squares = (x * x for x in xs)`?
- В отладке вы сделали `pairs = zip(users, spends)`, затем `debug = list(pairs)`. После этого `d = dict(pairs)` оказался пустым. Почему?
- Что произойдёт при выполнении `it = iter([])` и затем `next(it)`?
- Все вопросы по «Итераторы и генераторы» →