Что выведет код Senior Итераторы и генераторы обновлено
zip съедает элемент итератора
Вопрос
Что выведет код? По строке на каждый print.
it = iter([1, 2, 3, 4, 5])
pairs = list(zip(it, 'ab'))
print(pairs)
print(list(it))
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: [(1, 'a'), (2, 'b')], [4, 5]. zip берёт элементы по очереди слева направо.
Что выведет
[(1, 'a'), (2, 'b')]
[4, 5]
Разбор
zip берёт элементы по очереди слева направо. На третьем шаге он уже вытащил 3 из it, а потом обнаружил, что строка закончилась. Значение 3 потеряно, и в итераторе остаются 4, 5. Поэтому порядок аргументов zip важен, когда один из них разделяемый итератор: короткий ставят первым.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Рекурсивно развернуть вложенные списки
- Конвейер обработки лога на генераторах
- Свой итерируемый класс, который можно обходить много раз
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления