Есть xs = [1, 2, 3], it = iter(xs), затем it2 = iter(it). Какое утверждение верно?
A
it2 — это тот же iterator (или указывает на него), поэтому чтение из it2 продвигает it.B
it2 — новый независимый iterator, который начнёт снова с 1.C
it2 — копия списка xs.D
iter(it) превращает iterator в список.Правильный ответ. Для итератора
iter(it) возвращает его же, а не новый проход.Разбор
Общее правило: iter(iterable) создаёт итератор, а iter(iterator) возвращает тот же объект итератора. Поэтому it и it2 разделяют состояние: вызов next(it2) забирает следующий элемент у it и наоборот. Это частый источник багов, если ожидали «второй независимый проход».
Проверь себя · 1/3разбор после ответа
Функция-генератор
squares(n) делает yield i * i для i из range(n). Чему равно list(squares(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)` оказался пустым. Почему?
- Все вопросы по «Итераторы и генераторы» →