파이썬을 파이썬답게

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