파이썬 질문이 있습니다

  • 단델리언
    단델리언

    안녕하세요!
    문제를 풀다가 제가 원하는 것을 파이썬으로 구현하는데 있어서
    어려움이 있는데 해결책을 찾지 못해서 질문드립니다.

    예를 들면 list1, list2 가
    list1 = ['a', 'b', 'c']
    list2 = ['d','e']

    이렇게 있다고 한다면

    각 리스트들에서 하나씩의 항목을 뽑아 튜플로 만들어 가능한
    모든 조합을 하나의 리스트로 만들고 싶은데

    이 경우에는
    result = [(char1, char2) for char1 in list1 for char2 in list2]
    이렇게 하면 되는 건 알고 있습니다

    그런데 만약 해당되는 리스트들의 개수가 가변적인 경우에도
    가능한가요?

    예를 들면 리스트가 4개 일때도 있고 5개 일때도 있는 것 처럼
    전체의 개수는 알수 있는데 그게 가변적일 때 함수를 통해서 처리가 가능한가요? 한참 고민하고 찾아봤는데 도저히 모르겠어서 질문드립니다.


    7년 전
6개의 댓글이 있습니다.
  • Corea
    Corea

    list1, list2가 바뀌더라도

    result = [(char1, char2) for char1 in list1 for char2 in list2]
    

    부분은 잘 작동합니다.


    7년 전 link
  • 단델리언
    단델리언

    아..죄송합니다
    제가 질문을 애매하게 올렸네요..
    리스트 안의 항목들의 개수가 가변적인게 아니라
    총 리스트의 개수가 가변적일 때가 궁금해서요..


    7년 전 link
  • hyunhwan
    hyunhwan
    1. 리스트 수가 여럿일 때는 아래의 링크에 나온 itertools.combinations를 사용하시면 간단히 해결 될 것 같네요.
      https://docs.python.org/2/library/itertools.html#itertools.combinations

    2. 앞선 구현과 유사하게 list comprehension 을 이용해서는 가변적으로 처리하기 힘들지 싶습니다.


    7년 전 link
  • 단델리언
    단델리언

    댓글 감사합니다
    처음에 저도 itertools.combinations를 썼는데 안타깝게도 메모리 초과가 나가지고... 그래서 말씀하신대로 list comprehension으로 가능한지 찾는데 안되는건가요..ㅠ


    7년 전 link
  • hyunhwan
    hyunhwan

    list comprehension의 경우가 제 생각에는 메모리를 많이 소비할 것 같은데요? 그리고 itertools.combinations는 iterator이기 때문에 크게 메모리에 영향을 미치지 않을 것 같습니다. 아래의 코드 참조해주세요.

    import itertools
    
    a = [1,2,3,4,5]
    
    it = itertools.combinations(a,2)
    print(it.next())
    print(it.next())
    

    푸는 문제와 소스코드를 첨부하셔서 질문해주시면 원하시는 답변을 받는데 도움이 될 것 같습니다.


    7년 전 link
  • 단델리언
    단델리언

    앗!
    그 때 고민하던 문제는 다른 방식으로 해결했는데 궁금해서 질문 남겨놨었는데
    아...제가 생각을 잘못하고 있었네요
    감사합니다!


    7년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.