ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 순열, 조합, 곱집합
    언어/파이썬 & 장고 2019. 9. 21. 22:54

    파이썬에서는 순열, 조합, 곱집합 기능을 내장함수로 제공하고 있습니다.

    순열 (Permutation)

    순열이란 순서를 정해서 나열한 것을 말합니다.

    nPr로 표시하며 n * (n-1) * (n-2) * ... * (n-r+1) 로 계산됩니다.


    예를 들어, 1,2,3의 숫자가 적힌 카드가 있을 때, 이 중 두 장을 꺼내는 경우의 수(여기서 뽑힌 카드의 결과에 대해서 순서를 보장)를 구한다고 할 때, 코딩을 직접 해야 하지만 파이썬에서는 이를 직접 코딩할 필요없이 아래와 같은 기능을 제공해주고 있습니다.

    from itertools import permutations
    
    lists = [1,2,3]
    
    a = list(permutations(lists, 2))
    print(list(a))
    
    # 결과
    # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

    조합 (Combination)

    조합이란 서로 다른 n개에서 순서를 생각하지 않고 r개를 뽑는 것을 말합니다.

    nCr로 표시하며 n! / r!(n-r)! 로 계산됩니다.


    예를 들어, 1,2,3의 숫자가 적힌 카드가 있을 때, 이 중 두 장을 꺼내는 경우의 수(여기서 뽑힌 카드의 결과에 대해서 순서를 무시)를 구한다고 할 때, 코딩을 직접 해야 하지만 파이썬에서는 이를 직접 코딩할 필요없이 아래와 같은 기능을 제공해주고 있습니다.

    from itertools import combinations
    
    lists = [1,2,3]
    
    a = list(combinations(lists, 2))
    print(list(a))
    
    # [(1, 2), (1, 3), (2, 3)]

    곱집합 (Cartesian product)

    곱집합이란 여러 집합들 간에 하나씩 뽑아 조합을 만들 수 있는 모든 수를 뜻합니다.

    [1,2,3]과 [a,b,c] 가 있을 때, 모든 각 리스트에서 1개씩 뽑아서 만들 수 있는 모든 조합의 수를 구하는 기능을 파이썬에서는 아래와 같이 제공해주고 있습니다.

    from itertools import product
    
    a = [1,2,3]
    b = ['a', 'b', 'c']
    
    a = product(a,b)
    print(list(a))
    
    # [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]


    댓글