파이썬/문법
(python) 순열, 조합, 중복순열, 중복조합 구현(Feat. itertools)
komizke
2023. 1. 10. 00:00
1. 순열
nPr: 서로 다른 n개에서 r개를 중복 없이 나열하는 경우의 수
itertools 라이브러리에서permutations 함수 활용
from itertools import permutations
사용예시 1) 'A', 'B', 'C'에서 두 개를 중복 없이 선택하여 나열
character_list = ['A', 'B', 'C']
permutation_character_list = permutations(character_list, 2)
for part in permutation_character_list:
print(part)
#('A', 'B'), ('A', 'C'), ('B', 'A') ,('B', 'C'), ('C', 'A'), ('C', 'B')
사용예시 2) 'A', 'B', 'C', 'D', 'E'에서 두 개를 중복 없이 선택하여 나열
character_list = ['A', 'B', 'C', 'D', 'E']
permutation_character_list = permutations(character_list, 2)
for part in permutation_character_list:
print(part)
#('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'A'), ('B', 'C')
#('B', 'D'),('B', 'E'), ('C', 'A'), ('C', 'B'), ('C', 'D'), ('C', 'E')
#('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'E'), ('E', 'A'), ('E', 'B')
#('E', 'C'),('E', 'D')
2. 조합
nCr: 서로 다른 n개에서 r개를 선택하는 경우의 수
itertools 라이브러리에서 combinations 함수 활용
from itertools import combinations
사용예시 1) 빨강색, 파란색, 초록색, 노란색에서 두 가지 색을 뽑는다. (중복 X)
color_list = ['red', 'blue', 'green', 'yellow']
combination_color_list = combinations(color_list, 2)
for part in combination_color_list:
print(part)
#('red', 'blue'), ('red', 'green'), ('red', 'yellow')
#('blue', 'green'), ('blue', 'yellow'), ('green', 'yellow')
사용예시 2) 한 개씩 있는 1번부터 6번 공 중에서 눈을 감고 임의로 세 개를 뽑는다.
number_list = [1, 2, 3, 4, 5, 6]
combination_number_list = combinations(number_list, 3)
for part in combination_number_list:
print(part)
#(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 2, 6), (1, 3, 4)
#(1, 3, 5), (1, 3, 6), (1, 4, 5), (1, 4, 6), (1, 5, 6)
#(2, 3, 4), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6)
#(2, 5, 6), (3, 4, 5), (3, 4, 6), (3, 5, 6), (4, 5, 6)
3. 중복순열
nπr: n개에서 중복을 허용하여 r개를 선택하여 나열
itertools 라이브러리에서 product 함수 활용
from itertools import product
사용예시) 'A', 'B', 'C'에서 중복을 허용하여 두 개를 택하여 나열
character_list = ['A', 'B', 'C']
product_character_list = product(character_list, repeat=2)
for part in product_character_list:
print(part)
#('A', 'A'),('A', 'B'),('A', 'C'),('B', 'A'),('B', 'B')
#('B', 'C'),('C', 'A'),('C', 'B'),('C', 'C')
4. 중복조합
nHr: n개에서 중복을 허용하여 r개를 선택
itertools 라이브러리에서 combinations_with_replacement 함수 활용
from itertools import combinations_with_replacement
사용 예시) 1, 2, 3, 4에서 중복을 허용하여 세 개를 선택
number_list = [1, 2, 3, 4]
cwr_list = combinations_with_replacement(number_list, 3)
for part in cwr_list:
print(part)
#(1, 1, 1),(1, 1, 2),(1, 1, 3),(1, 1, 4),(1, 2, 2)
#(1, 2, 3),(1, 2, 4),(1, 3, 3),(1, 3, 4),(1, 4, 4)
#(2, 2, 2),(2, 2, 3),(2, 2, 4),(2, 3, 3),(2, 3, 4)
#(2, 4, 4),(3, 3, 3),(3, 3, 4),(3, 4, 4),(4, 4, 4)