ETC/알고리즘 이론

[알고리즘] 리스트의 모든 조합 구할때 고려할점 (permutations, combinations VS product) (Python)

지과쌤 2021. 8. 20.
반응형

리스트 내의 값들의 모든 조합을 구하기 위해 itertools를 사용하는것은 다 알고 있을것이다.

 

2021.08.06 - [<공부>/[Algorithm]] - [파이썬] 경우의 수 (순열, 조합) 구하기 - itertools

 

[파이썬] 경우의 수 (순열, 조합) 구하기 - itertools

import itertools itertools 라이브러리를 사용하여 원소들의 순열과 조합을 사용할 수 있다. 1. 순열 순열은 서로 다른 n개 중, r개를 나열하는 경우의 수로 permutations 함수를 사용한다. def permutation(sel..

earthteacher.tistory.com

 

하지만, 문제를 풀다 자주 부딪히는 고민이 생겨 따로 포스팅을 하게 되었다.

바로 단일 리스트 내부 원소들의 조합을 구할때 vs 두개 이상의 리스트의 모든 원소들의 조합을 구할때 이다.


결론

- 단일 리스트에서 내부 원소들의 조합을 계산할 경우 : permutations, combinations 사용

 

- 두개 이상의 리스트의 모든 원소들의 조합을 계산할 경우 : product 사용

 


단일 리스트에서 내부 원소들의 조합을 계산할 경우

    #순열
    def permutation(self):
        # n=3, r=2
        resultList = list(set(list(itertools.permutations(["a", "b", "c"], 2))))
        print("경우의 수 : {}개".format(len(resultList)))
        print(*resultList, sep="\n")
        
        #경우의 수 : 6개
        #('a', 'b')
        #('c', 'a')
        #('a', 'c')
        #('b', 'a')
        #('b', 'c')
        #('c', 'b')

    #조합
    def combinations(self):
        # n=3, r=2
        resultList = list(itertools.combinations(["a", "b", "c"], 2))
        print("경우의 수 : {}개".format(len(resultList)))
        print(*resultList, sep="\n")
        
        #경우의 수 : 3개
        #('a', 'b')
        #('a', 'c')
        #('b', 'c')

두개 이상의 리스트의 모든 원소들의 조합을 구할 때

    def product_with_others(self):
        firstList = ["A", "B", "C"]
        secondList = [100, 200, 300]
        thirdList = [0.001, 0.002, 0.003]

        resultList = list(itertools.product(*[firstList, secondList, thirdList]))
        print("경우의 수 : {}개".format(len(resultList)))
        print(*resultList, sep="\n")
        
        """
        경우의 수 : 27개
        ('A', 100, 0.001)
        ('A', 100, 0.002)
        ('A', 100, 0.003)
        ('A', 200, 0.001)
        ('A', 200, 0.002)
        ('A', 200, 0.003)
        ('A', 300, 0.001)
        ('A', 300, 0.002)
        ('A', 300, 0.003)
        ('B', 100, 0.001)
        ('B', 100, 0.002)
        ('B', 100, 0.003)
        ('B', 200, 0.001)
        ('B', 200, 0.002)
        ('B', 200, 0.003)
        ('B', 300, 0.001)
        ('B', 300, 0.002)
        ('B', 300, 0.003)
        ('C', 100, 0.001)
        ('C', 100, 0.002)
        ('C', 100, 0.003)
        ('C', 200, 0.001)
        ('C', 200, 0.002)
        ('C', 200, 0.003)
        ('C', 300, 0.001)
        ('C', 300, 0.002)
        ('C', 300, 0.003)
        """
반응형

댓글

💲 추천 글