✏️ [Algorithm] itertools 라이브러리에 대해서

박상민·2024년 10월 8일

Algorithm

목록 보기
16/21

⭐️ 서론

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

⭐️ itertools: 효율적인 루핑을 위한 iterator를 만드는 함수

파이썬 공식 문서

itertools의 여러가지 함수 중 조합형 iterator

  • combinations()
  • combinatios_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이 정렬되어 있으면, 조합 튜플이 정렬된 순서로 생성된다.

📌 combinatios_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, 3): #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의 중복 순열 뽑기

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가 제공하는 함수는 매우 많다. 필요에 따라 조합, 순열 등이 필요한 문제에 적용하면 좋다.

추가적인 사항은 아래 출처의 파이썬 공식 문서를 참고하자.


출처
파이썬 공식 문서

0개의 댓글