알고리즘 풀이를 하다보니 조합, 순열, 중복 순열 개념이 자주 등장하는 것을 알았다.
물론 직접 코드로 구현할수도 있지만, itertools 라이브러리에 이미 구현되어 있기에 잘 이용한다면 큰 도움이 될 것 같아서 정리를 한다.

itertools의 여러가지 함수 중 조합형 iterator
from itertools import combinations
l = [1,2,3]
for i in combinations(l,2):
print(i)
---------------------
출력 결과:
(1, 2)
(1, 3)
(2, 3)
파이썬 공식 문서에 따르면 입력 iterable의 순선에 따라 사전식 순서로 방출된다.
따라서, 입력 iterable이 정렬되어 있으면, 조합 튜플이 정렬된 순서로 생성된다.
from itertools import combinations_with_replacement
l = ['A', 'B', 'C']
for i in combinations_with_replacement(l,2):
print(i)
-------------
출력결과:
('A', 'A')
('A', 'B')
('A', 'C')
('B', 'B')
('B', 'C')
('C', 'C')
from itertools import permutations
l = ['A', 'B', 'C']
for i in permutations(l, 3): #r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다!
print(i)
---------------
출력결과:
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
from itertools import product
l1 = ['A', 'B']
l2 = ['1', '2']
for i in product(l1,l2,repeat=1): #l1과 l2의 모든 쌍을 지어 리턴한다
print(i)
------------------
출력결과:
('A', '1')
('A', '2')
('B', '1')
('B', '2')
------------------
for i in product(l1,repeat=3): #product(l1,l1,l1,repeat=1)과 동일한 출력
print(i)
------------------
출력결과:
('A', 'A', 'A')
('A', 'A', 'B')
('A', 'B', 'A')
('A', 'B', 'B')
('B', 'A', 'A')
('B', 'A', 'B')
('B', 'B', 'A')
('B', 'B', 'B')
product는 다른 함수와 달리 인자로 여러 iterable을 넣어줄 수 있고, 그 iterable간의 모든 짝을 지어서 리턴한다.
이 외에도 itertools가 제공하는 함수는 매우 많다. 필요에 따라 조합, 순열 등이 필요한 문제에 적용하면 좋다.
추가적인 사항은 아래 출처의 파이썬 공식 문서를 참고하자.
출처
파이썬 공식 문서