-
[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')]