>

이터레이터의 복사본을 느리게 (잠재적으로 많은 수의) 생성하는 이터레이터를 만들려고합니다. 가능합니까?

간단히 수행하여 고정 된 수의 사본을 만들 수 있음을 알고 있습니다

iter_copies = tee(my_iter, n=10)

하지만 n을 미리 알지 못하거나 n이 무한한 경우에는 고장입니다.

보통 나는 줄을 따라 무언가를 시도 할 것이다

def inf_tee(my_iter):
    while True:
        yield tee(my_iter)[1]

하지만 이터레이터에서 티를 사용한 후에는 원래 이터레이터를 더 이상 사용할 수 없으므로 문서가 작동하지 않습니다.

<시간>

애플리케이션에 관심이있는 경우 : 게으른 unzip 기능으로 잠재적으로 pytoolz 에서 사용할 수 있습니다. 현재 구현은 유한 한 무한 반복자를 처리 할 수 ​​있습니다 (일반 zip(*seq) 보다 낫습니다) )이지만 무한 반복자가 아닙니다. 세부 사항에 관심이있는 경우 풀 요청 입니다.


  • 답변 # 1

    이것은 Python 2 itertools 의 맨 아래 근처의 단일 예제에서만 거의 다루지 않습니다.  문서, 그러나 itertools.tee  복사 지원 :

    import itertools, copy
    def infinite_copies(some_iterable):
        master, copy1 = itertools.tee(some_iterable)
        yield copy1
        while True:
            yield copy.copy(master)
    
    

    문서의 예제는 실제로 __copy__ 를 사용합니다   copy.copy 를 사용자 정의하는 데 사용되는 후크 인 마술 방법  행동. (물론 tee.__copy__  복사 할 수없는 반복자 프로젝트의 일부로 추가되지 않았습니다.)

    원래 이터레이터에서 생성 된 모든 요소를 ​​저장해야하므로 비용이 많이 듭니다. 이 비용을 피할 방법이 없습니다.

  • 이전 hibernate - 런타임에 Spring UserDetails 오브젝트 가져 오기
  • 다음 linux - awk를 사용하여 grep match에서 텍스트를 추출하고 나란히 배치