본문 바로가기
Programming/- Python

[Python] itertools : 순열 / 조합 (permutations / combinations)

by 완벽주의탈피 2022. 4. 13.

간단한 라이브러리를 사용하여 순열과 조합 효율적으로 사용하기

 

참조 : 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

댓글