문제 풀이를 하다보면 조합, 순열 등의 반복되는 연산을 하는 경우가 많다.
파이썬에는 조합과 순열의 기능이 라이브러리로 구현이 되어있다.
itertools라는 라이브러리에 정리가 되어있다.
- permutations: 순열
- combinations: 조합
- product: 중복 허용 순열
- combinations_with_replacement: 중복 허용 조합
모두 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하여(or 고려하지 않고) 중복을 허용하여(or 허용하지 않고) 나열하는 모든 경우를 계산한다.
- 데이터 목록과 뽑을 데이터의 개수를 인자로 넘겨준다
모두 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다. (까먹기 좋을 듯 하다.)
소스코드
from itertools import permutations, combinations, product, combinations_with_replacement
data = ['A', 'B', 'C'] # 데이터 준비
result = list(permutations(data, 3)) # 모든 순열 구하기
print(result)
result = list(combinations(data, 2)) #2개를 뽑는 모든 조합 구하기
print(result)
result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기(중복 허용)
print(result)
result = list(combinations_with_replacement(data, repeat=2)) # 2개를 뽑는 모든 조합 구하기(중복 허용)
print(result)
출력
#3개를 뽑는 순열
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
#2개를 뽑는 조합
[('A', 'B'), ('A', 'C'), ('B', 'C')]
#2개를 뽑는 중복허용 순열
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
#2개를 뽑는 중복허용 조합
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]