편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2023.02.27

    python 제너레이터화


    from itertools import product  
    combis = []  
    for i in range(1,5):  
       for j in product([x for x in range(1,5)], repeat=i):  
            combis.append(j)  
    
    combis 를 루프 돌기
    

    제너레이터화 시키지 못한 예시 코드는 상단과 같습니다.
    이터툴스의 모듈들은 제너레이터니까, 그걸 잘 써보려고 했는데, 잘 안된단 말이죠.

    결국 원하는 combis는 다음과 같습니다.

    [1], [2], [3], ..[1,1], [1,2], [1,3], 
    ... 
    [1,1,1], [1,1,2], [1,1,3]...[1,1,1,1], [1,1,1,2], ...
    

    메모리를 쓸데없이 많이 먹습니다.

    이걸 제너레이터로 쓰려면 어떡하면 될까요?

    그러니까

    def combi():
        for i in range(1,5):
            for j in product([x for x in range(1,5)], repeat=i):
                yield(j)
    

    이걸 안 만들어 주고, 있는 이터툴스를 이용해서 하는 방법을 찾습니다.

  • 프로필 광자님의 편집
    날짜2023.02.27

    python 제너레이터화


    from itertools import product  
    combis = []  
    for i in range(1,5):  
       for j in product([x for x in range(1,5)], repeat=i):  
            combis.append(j)  
    
    combis 를 루프 돌기
    

    제너레이터화 시키지 못한 예시 코드는 상단과 같습니다.
    이터툴스의 모듈들은 제너레이터니까, 그걸 잘 써보려고 했는데, 잘 안된단 말이죠;;;;

    결국 원하는 combis는 다음과 같습니다.

    [1], [2], [3], ..[1,1], [1,2], [1,3], ... [1,1,1], [1,1,2], [1,1,3]...[1,1,1,1], [1,1,1,2], ...

    메모리를 쓸데없이 많이 먹습니다.

    이걸 제너레이터로 쓰려면 어떡하면 될까요?

    그러니까

    def combi():
        for i in range(1,5):
            for j in product([x for x in range(1,5)], repeat=i):
                yield(j)
    

    이걸 안 만들어 주고 있는 이터툴스를 이용해서 하는 방법을 찾습니다.