Код Middle Итераторы и генераторы обновлено
Конвейер обработки лога на генераторах
Условие
Напишите errors(lines, limit): из строк лога вида "LEVEL текст" верните первые limit текстов (без уровня, обрезанных по краям) строк уровня ERROR. Пустые строки и строки только из пробелов пропускайте. Решение должно быть ленивым: строки после limit-й ошибки не читаются. Проверка run(lines, limit) возвращает [результат, сколько строк было прочитано].
Примеры
run(["INFO ok", "ERROR db down", "ERROR disk", "INFO later"], 1) // [["db down"], 2]
run(["ERROR a", "ERROR b"], 5) // [["a", "b"], 2]
run([], 3) // [[], 0]
Как подойти
Подсказки: 2
- Цепочка генераторных выражений, в конце
itertools.islice. - Строка без текста после уровня даёт пустой текст.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Рекурсивно развернуть вложенные списки
Следующий вопрос
Свой итерируемый класс, который можно обходить много раз
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления
- Протокол итерации
- Генераторное выражение против list comprehension
- itertools.groupby на несортированных данных