Есть генератор неизвестно большой длины. Как получить его последние 1000 элементов, не сохраняя всю последовательность?

Используйте collections.deque с maxlen=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 в цикле и считайте его текущим скользящим хвостом. Это ограничивает число сохранённых элементов, но не размер каждого из них.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее