Algorithm

[파이썬] itertools 라이브러리 사용법 (순열, 조합)(permutations, combinations) - Python 문법

seu11ee 2020. 10. 18. 22:47

오늘은 파이썬 라이브러리 중 하나인 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