오늘은 파이썬 라이브러리 중 하나인 itertools에 대해 알아보겠습니다~!
알고리즘을 풀면 조합과 순열 개념이 자주 등장하는데요,
itertools 라이브러리를 이용하면 조합과 순열을 쉽게 구할 수 있답니당.
itertools : 효율적인 루핑을 위한 이터레이터를 만드는 함수
itertools에는 여러가지 함수들이 많이 있는데, 그 중 조합형 이터레이터인
- combinations()
- combinations_with_replacement()
- product()
- permutations()
에 대해 알아봅시다.
combinations(iterable, r) : iterable에서 원소 개수가 r개인 조합 뽑기
from itertools import combinations
l = [1,2,3]
for i in combinations(l,2):
print(i)
'''
출력 결과:
(1, 2)
(1, 3)
(2, 3)
'''
파이썬 공식문서에 따르면 입력 iterable의 순서에 따라 사전식 순서로 방출됩니다. 따라서, 입력 iterable이 정렬되어있으면, 조합 튜플이 정렬된 순서로 생성됩니다.
combinations_with_replacement(iterable,r) : iterable에서 원소 개수가 r개인 중복 조합 뽑기
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')
'''
permutations(iterable,r=None) : iterable에서 원소 개수가 r개인 순열 뽑기
from itertools import permutations
l = ['A', 'B', 'C']
for i in permutations(l): #r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다!
print(i)
'''
출력결과:
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
'''
product(*iterables, repeat=1) : 여러 iterable의 데카르트곱 리턴
product는 다른 함수와 달리 인자로 여러 iterable을 넣어줄 수 있고 그 친구들간의 모든 짝을 지어서 리턴합니다.
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')
'''
조합, 순열이 필요한 문제에 꼭 적용해보세요!
'Algorithm' 카테고리의 다른 글
[파이썬] 람다(lambda) 쓰는 법 - Python 문법 (4) | 2020.10.11 |
---|