itertools.permutation
itertools.combinations
예시
- 1, 2, 3 에서 숫자 두개로 만드는 조합의 경우의 수는 12, 13, 21, 23, 31, 32
- ‘A’, ‘B’, ‘C’ 로 만들 수 있는 경우의 수는 ‘ABC’, ‘ACB’, ‘BAC’, ‘BCA’, ‘CAB’, ‘CBA’
itertools.permutations
- 파이썬에서는 itertools.permutations을 이용하면 for문을 사용하지 않고도 순열을 구할 수 있다.
from itertools import permutations
pool = ['A', 'B', 'C']
# 모든 원소로 순열 구하기
list(permutations(pool))
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
list(map(''.join, itertools.permutations(pool)))
['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
# 2개의 원소로 순열 구하기
list(permutations(pool, 2))
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
list(map(''.join, itertools.permutations(pool, 2)))
['AB', 'AC', 'BA', 'BC', 'CA', 'CB']
itertools.combinations
- 조합은 itertools.combinations를 사용해서 구할 수 있다.
- permutations와 달리 두 번째 인자가 필수 값이다.
from itertools import combinations
pool = ['A', 'B', 'C', 'D']
# 3개 원소의 조합
list(combinations(pool, 3))
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')]
# 2개 원소의 조합
list(combinations(pool, 2))
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
list(map(''.join, combinations(pool, 2)))
['AB', 'AC', 'AD', 'BC', 'BD', 'CD']