파이썬

파이썬) 모든 경우의 수 추출 가능한 라이브러리

이소금 2021. 9. 5. 16:00
반응형

최근 회사에서 자동화 업무를 요청받았습니다!! (너무 기분 좋습니다ㅠㅠ)

 

경우의 수를 모두 아우를 수 있는 코드를 짜야하는데

for을 여러개 쌓아 직접 만들어보려 했는데 검색해보니 편한 라이브러리가 있었습니다,

itertools라는 라이브러리고 내장 함수입니다.

from itertools import *

로 간단히 import 받으시면 됩니다.

 

1.  순열(Permutation)

순서는 있으나 중복 없는 모든 경우의 수를 나열합니다. 2는 dataset에서 2개를 뽑아 리스트를 만들어주는 역할을 합니다.

    dataset = ['A', 'B', 'C']

    printList = list(permutations(dataset, 2))
    print(printList)
    
    # 결과값
    # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
    dataset = ['A', 'B', 'C']

    printList = list(permutations(dataset, 3))
    print(printList)
    
    # 결과값
    # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

 

2.  조합(Combination)

순서 상관 없는 경우의 수를 나열합니다.

    dataset = ['A', 'B', 'C']

    printList = list(combinations(dataset, 2))
    print(printList)
    
    # 결과값
    # [('A', 'B'), ('A', 'C'), ('B', 'C')]
    dataset = ['A', 'B', 'C']

    printList = list(combinations(dataset, 3))
    print(printList)
    
    # 결과값
    # [('A', 'B', 'C')]


3.  중복 순열(Permutation with repetition)

중복을 허용하는 순열입니다. 1번 순열에 중복만 포함된 경우라고 이해하시면 되겠습니다.

    dataset = ['A', 'B', 'C']

    printList = list(product(dataset, repeat = 2))
    print(printList)

    # 결과값
    # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
    dataset = ['A', 'B', 'C']

    printList = list(product(dataset, repeat = 3))
    print(printList)


    # 결과값
    # [('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'A', 'C'), ('A', 'B', 'A'), ('A', 'B', 'B'), ('A', 'B', 'C'), ('A', 'C', 'A'), ('A', 'C', 'B'), ('A', 'C', 'C'), ('B', 'A', 'A'), ('B', 'A', 'B'), ('B', 'A', 'C'), ('B', 'B', 'A'), ('B', 'B', 'B'), ('B', 'B', 'C'), ('B', 'C', 'A'), ('B', 'C', 'B'), ('B', 'C', 'C'), ('C', 'A', 'A'), ('C', 'A', 'B'), ('C', 'A', 'C'), ('C', 'B', 'A'), ('C', 'B', 'B'), ('C', 'B', 'C'), ('C', 'C', 'A'), ('C', 'C', 'B'), ('C', 'C', 'C')]

 

4.  중복 조합(Combination with repetition)
중복 포함, 순서를 고려하지 않는 경우입니다.

    dataset = ['A', 'B', 'C']

    printList = list(combinations_with_replacement(dataset, 2))
    print(printList)


    # 결과값
    # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
    dataset = ['A', 'B', 'C']

    printList = list(combinations_with_replacement(dataset, 3))
    print(printList)


    # 결과값
    # [('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'A', 'C'), ('A', 'B', 'B'), ('A', 'B', 'C'), ('A', 'C', 'C'), ('B', 'B', 'B'), ('B', 'B', 'C'), ('B', 'C', 'C'), ('C', 'C', 'C')]

 

모두 해피코딩 하세요~!!! >.< 깨륵

반응형