В Python, я могу лениво генерировать копии итератора, используя тройник?
Я пытаюсь создать итератор, который лениво создает (потенциально бесконечно много) копий итератора. Это возможно?
Я знаю, что могу создать любое фиксированное конечное число копий, просто выполнив
iter_copies = tee(my_iter, n=10)
но это ломается, если вы не знаете n заранее или n бесконечно.
Я обычно пробовал бы что-то вроде
def inf_tee(my_iter):
while True:
yield tee(my_iter)[1]
Но в документации говорится, что после использования tee на итераторе исходный итератор больше не может использоваться, поэтому это не будет работать.
В случае, если вы заинтересованы в приложении: идея состоит в том, чтобы создать ленивыйunzip
функция, потенциально для использования вpytoolz, Моя текущая реализация может обрабатывать конечное число бесконечных итераторов (что лучше, чем обычныйzip(*seq)
), но не бесконечное число бесконечных итераторов. Воттянуть запрос если вы заинтересованы в деталях.