간단한 라이브러리를 사용하여 순열과 조합 효율적으로 사용하기
참조 : https://docs.python.org/ko/3/library/itertools.html
itertools 라이브러리
- import itertools 정의로 사용 가능
- 조합형 이터레이션 : 순열, 조합, 중복 순열, 중복 조합
import itertools
# 개별 사용
from itertools import permutations
from itertools import combinations
from itertools import product
from itertools import combinations_with_replacement
순열 (Permutations)
- 서로 다른 n개 중 r개를 선택하는 경우의 수 (순서 상관 O)
- nPr = n! / (n - r)!
- itertools.permutations(n, r)
# n개의 원소가 있는 리스트
n = [1, 2, 3]
# r개 선택
r = 2
# nPr = n! / (n - r)!
nPr = itertools.permutations(n, r)
# 결과 : nPr = (1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)
조합 (Combinations)
- 서로 다른 n개 중 r개를 선택하는 경우의 수 (순서 상관 X)
- nCr = n! / (n - r)!r!
- itertools.combinations(n, r)
# n개의 원소가 있는 리스트
n = [1, 2, 3]
# r개 선택
r = 2
# nCr = n! / (n - r)!r!
nCr = itertools.combinations(n, r)
# 결과 : nCr = (1, 2) (1, 3) (2, 3)
중복 순열 (Products)
- 중복 가능한 n개 중 r개를 선택하는 경우의 수 (순서 상관 O)
- nPir = n^r
- itertools.product(n, r)
# n개의 원소가 있는 리스트
n = [1, 2, 3]
# r개 선택
r = 2
# nPr = n ^ r
nPr = itertools.product(n, r)
# 결과 : nπr = (1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
중복 조합 (Combinations with replacement)
- 중복 가능한 n개 중 r개를 선택하는 경우의 수 (순서 상관 X)
- nHr = n+r-1Cr
- itertools.combinations_with_replacement(n, r)
# n개의 원소가 있는 리스트
n = [1, 2, 3]
# r개 선택
r = 2
# nHr = n+r-1Cr
nHr = itertools.combinations_with_replacement(n, r)
# 결과 : nHr = (1, 1) (1, 2) (1, 3) (2, 2) (2, 3) (3, 3)
그 외
- 이런 식으로 문자열을 넣어도 가능하다.
permutations('ABCD', 2) # AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) # AB AC AD BC BD CD
product('ABCD', repeat=2) # AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
combinations_with_replacement('ABCD', 2) # AA AB AC AD BB BC BD CC CD DD
'Programming > - Python' 카테고리의 다른 글
[Python] Collections : 개수 세기 (Counter) (0) | 2022.05.10 |
---|---|
[Python] 리스트 정리 (index / append / del / insert / remove) (0) | 2022.04.22 |
[Python] map 함수 사용법 (0) | 2022.04.19 |
[Python] 문자열 / 리스트 (list / split / join) (0) | 2022.04.15 |
[Python] 문자열 : 대문자 / 소문자 변경 함수 (upper / lower) (0) | 2022.04.15 |
댓글