파이썬에서 일일히 수동으로 조합을 계산하려다보면 코드도 너무 길어지고 시간도 오래걸리는데요... 이를 간단하게 구할 수 있는 방법에 대해서 알아볼께요.
일단 코드부터...
from itertools import combinations
import math
example = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = len(example)
r = 2
print(f'{int(math.factorial(n)/(math.factorial(r)*math.factorial(n-r)))}개\n')
print("기존 리스트")
print(str(example))
results = list(combinations(example, r))
print(f"\n가능한 모든 조합 ({len(results)}개)")
print(str(results))
36개
기존 리스트
[1, 2, 3, 4, 5, 6, 7, 8, 9]
가능한 모든 조합 (36개)
[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9),
(2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9),
(3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9),
(4, 5), (4, 6), (4, 7), (4, 8), (4, 9),
(5, 6), (5, 7), (5, 8), (5, 9), (6, 7),
(6, 8), (6, 9),
(7, 8), (7, 9),
(8, 9)]
9개의 숫자를 포함하는 리스트에서 2개씩 골랐을 때의 모든 경우의 수는 36입니다. (n = 9, r = 2)
개수는 math > factorial 기능으로 쉽게 구할 수 있지만 경우의 수를 모두 출력하려면 itertools를 사용하는게 더 수월하답니다. itertools의 combinations를 불러와주고 list와 각 조합의 원소 개수(r)을 설정해주면 list로 결과물을 출력해준답니다.
728x90
'플그래밍 > 파이써언' 카테고리의 다른 글
[파이썬 기초] 너무 쉬운 pyautogui (0) | 2022.11.02 |
---|---|
[파이썬] 간단한 파일 검색기 (0) | 2022.10.31 |
[파이썬] 가상환경 Activate 오류 (0) | 2022.06.13 |
[파이썬] 가상환경(virtual environment) 생성 (0) | 2022.06.13 |
[파이썬] django 업그레이드 (0) | 2022.06.13 |