Используйте collections.deque с maxlen=1000: при добавлении нового элемента самая старая запись автоматически удаляется. Память ограничена последней тысячей элементов.
Есть генератор неизвестно большой длины. Как получить его последние 1000 элементов, не сохраняя всю последовательность?
Используйте collections.deque с maxlen=1000: при добавлении нового элемента самая старая запись автоматически удаляется. Память ограничена последней тысячей элементов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте collections.deque с maxlen=1000: при добавлении нового элемента самая старая запись автоматически удаляется. Память ограничена последней тысячей элементов.
from collections import deque
last = deque(generator, maxlen=1000)
Генератор будет прочитан до конца, время — O(n), дополнительная память — O(min(n, 1000)) ссылок. Если элементов меньше тысячи, сохранятся все. Для бесконечного генератора последние элементы не определены до остановки; тогда обновляйте deque в цикле и считайте его текущим скользящим хвостом. Это ограничивает число сохранённых элементов, но не размер каждого из них.