본문 바로가기
Programming/Python

[Python] 순열, 조합 itertools 설명 및 예제

by 코딩하는 금융인 2021. 8. 24.

안녕하세요.

오늘은 코딩테스트나 실제로 자주 사용되는 Python 내부 모듈 itertools에 대해 알아보겠습니다.

출처 : javapoint.com

 

 파이썬 itertools 모듈 설명

 itertools란?

Python 내장 라이브러리로 자신만의 반복자를 만드는 모듈입니다. 무엇인가 반복되는 요소에 대한 처리나 특정 배열에 대하여 순열이나 조합을 만들어야 할 때 유용하게 사용될 수 있습니다.

 

▣ 라이브러리 import

import itertools

 

 유용한 itertools 메소드

반복자(generator) 인수 결과
product() p,q.../ repeat = 1 중첩된 loop 반복문에 해당하는 데카르트의 곱
permutations() p [,r] r 길이 tuple, 가능한 모든 순서, 반복 X
combinations() p, r r 길이 tuple, 정렬된 순서, 반복 X
combinations_with_replacement() p, r r 길이 tuple, 정렬된 순서, 반복 O

 

① product

데카르트 곱이라고도 하는 cartesian product를 표현할 때 사용하는 메소드로, 두 개 이상의 리스트의 모든 조합을 구할 때 주로 사용된다.

from itertools import product

example = ["가나다", "abc", "123"]
pd = list(product(*example)) # *는 리스트 내 경우의 수 구하기

print(pd) # 3 X 3 X 3 = 27 경우의 수
[('가', 'a', '1'), ('가', 'a', '2'), ('가', 'a', '3'), 
('가', 'b', '1'), ('가', 'b', '2'), ('가', 'b', '3'), 
('가', 'c', '1'), ('가', 'c', '2'), ('가', 'c', '3'), 
('나', 'a', '1'), ('나', 'a', '2'), ('나', 'a', '3'), 
('나', 'b', '1'), ('나', 'b', '2'), ('나', 'b', '3'), 
('나', 'c', '1'), ('나', 'c', '2'), ('나', 'c', '3'), 
('다', 'a', '1'), ('다', 'a', '2'), ('다', 'a', '3'), 
('다', 'b', '1'), ('다', 'b', '2'), ('다', 'b', '3'), 
('다', 'c', '1'), ('다', 'c', '2'), ('다', 'c', '3')]

 

② 순열 : permutations

순열을 표현할 때 사용되는 메소드로, 한 리스트에서 중복을 허용하고 모든 경우의 수를 구할 때 사용된다. 반환되는 항목의 수는 n! / (n-r)!이다.

from itertools import permutations

example = [1, 2, 3]
perm = list(permutations(example, 2))
print(perm)
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

 

③ 조합 : combinations

조합을 표현할 때 사용되는 메소드로, 한 리스트에서 중복을 허용하지 않고 모든 경우의 수를 구할 때 사용된다. 반환되는 항목의 수는 n! / (n - r)!r!이다.

from itertools import combinations
example = ['a', 'b', 'c']
cb = list(combinations(example, 2))
print(cb)
[('a', 'b'), ('a', 'c'), ('b', 'c')]

 

④ combinations_with_replacement()

combinations와 동일, 반복 여부에서 차이가 있다.

s = ['ㄱ','ㄴ','ㄷ','ㄹ']
k = 2 

from itertools import combinations_with_replacement
c = list(combinations_with_replacement(s,k))
for i in c:
    print(''.join(i))
    
ㄱㄱ
ㄱㄴ
ㄱㄷ
ㄱㄹ
ㄴㄴ
ㄴㄷ
ㄴㄹ
ㄷㄷ
ㄷㄹ
ㄹㄹ

 

 

 itertools 예제 및 풀이

프로그래머스에 있는 itertools 모듈의 permutations/combinations를 활용한 예제와 풀이를 아래의 링크 통해서 올려놓았습니다. 관심 있으신 분들은 참고하시기를 바랍니다. 감사합니다.

 

<itertools 예제>

2020.11.01 - [코딩테스트/프로그래머스] - [Programmers] 프로그래머스 파이썬 > 월간 코드 챌린지 시즌1 > 두 개 뽑아서 더하기

2020.09.03 - [코딩테스트/프로그래머스] - [Programmers] 2019 카카오 > 후보키

2020.08.23 - [코딩테스트/프로그래머스] - [Programmers] 2020 카카오 인턴십 > 수식 최대화

 

 

 

반응형

댓글