Код Senior Итераторы и генераторы обновлено
Свой итерируемый класс, который можно обходить много раз
Условие
Реализуйте класс Countdown(n): при обходе выдаёт n, n-1, ..., 1. Объект должен поддерживать повторный и вложенный обход (каждый for независим) и len(). Проверка run(n) возвращает [list(c), list(c), количество пар во вложенном цикле, len(c)].
Примеры
run(3) // [[3, 2, 1], [3, 2, 1], 9, 3]
run(0) // [[], [], 0, 0]
run(1) // [[1], [1], 1, 1]
Как подойти
Подсказки: 2
- Сделайте
__iter__генератором. - Не храните текущую позицию в
self.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Конвейер обработки лога на генераторах
Следующий вопрос
Когда выполняется finally в недочитанном генераторе
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Рекурсивно развернуть вложенные списки
- Полезные функции itertools
- Ленивые вычисления
- Протокол итерации
- Генераторное выражение против list comprehension
- itertools.groupby на несортированных данных