파이썬 random_chunk 관련 질문입니다.

조회수 674회

2개의 리스트를 입력 받고 셔플 뒤 랜덤하게 자르는 함수를 만들고 있습니다. 랜덤이 되었을 때 위치를 따라가는 것 까진 했지만, 자르는 과정에서 어떻게 같이 잘라야할지 잘 몰라 질문하게 되었습니다.

def random_chunk(li,b, min_chunk=1, max_chunk=3):
    it = iter(li)
    bb = iter(b)
    while True:   #2개의 리스트가 같은 크기로 잘렸으면 좋겠습니다.
        nxt = list(islice(it,randint(min_chunk,max_chunk)))
        if nxt:
            yield nxt
        else:
            break
#example
a = [1,2,3,4]
b = [5,6,7,8]

slice = list(random_chunk(a,b))

#print
a = [[2,1], [4,3]]
b = [[6,5], [8,7]]
or 
a = [[3,2,1],[4]]
b = [[7,6,5],[8]]
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 질문이 잘 이해가 안됩니다. 2개의 리스트를 입력받고 그 리스트를 각각 섞은뒤에 자르는 함수...까지는 이해가 됩니다만 랜덤하게 자르는데 두개의 리스트가 같은 크기로 잘려야 된다는 의미를 모르겠네요. 정영훈 2018.11.27 18:56
  • 예를들어 A의 리스트가 3개의 부분으로 나뉘면 B의 리스트도 동일하게 3개로 잘렸으면 한다는 얘기입니다. 알 수 없는 사용자 2018.11.28 13:59

1 답변

  • 아래코드 참고해보시구요

    각각의 리스트를 각각 작업하면 어떨까합니다.

    import random
    
    a = [1,2,3,4]
    b = [5,6,7,8]
    
    random.shuffle(a)
    random.shuffle(b)
    
    cnt = 3
    print [a[n:n + cnt] for n in range(0, len(a), cnt)]
    print [b[n:n + cnt] for n in range(0, len(b), cnt)]
    
    cnt = 2
    print [a[n:n + cnt] for n in range(0, len(a), cnt)]
    print [b[n:n + cnt] for n in range(0, len(b), cnt)]
    
    • 온라인 테스트는 아래 링크에서 가능합니다. https://pyfiddle.io/fiddle/fa04dada-6877-4aea-a118-1a950ee2a545/?i=true
    • 답변감사합니다. 제가 만든 함수에서 Randint 값만 똑같이 받을 수 있다면 여러개 리스트를 자를 수 있을거라 생각하는데 그 방법은 없을까요 ? 알 수 없는 사용자 2018.11.28 19:39
    • 랜덤값이니 똑같이 나올확률은 적구요.한번만 해서 변수에 넣고 사용하면 되지 않을까요? 정영훈 2018.11.28 20:00
    • 감사합니다! 알 수 없는 사용자 2018.11.28 22:00

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)