Есть xs = [1, 2, 3] и it = iter(xs). Сначала выполняется a = list(it), а затем b = list(it). Чему равно b?
AПустой список
[]BСписок
[1, 2, 3]CИсключение
TypeErrorDИсключение
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?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `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)`?
- Все вопросы по «Итераторы и генераторы» →