알고리즘을 하면서 자주 쓰는 라이브러리가 정해져있다.
그걸 계속 까먹어서 나 그만 까먹으라고 정리하는 글 !!!
itertools : 효율적인 루핑을 위한 이터레이터를 만드는 함수
itertools에는 여러가지 함수들이 많은데, 그중 자주쓰는것들은
combinations()
, permutations()
, product()
, combinations_with_replacement()
정도가 있다.
혹시나 집고 넘어가자면
combinations(itertable, r)
: iterable에서 원소 개수가 r개인 조합 뽑기
from itertools import combinations
list = [1, 2, 3]
for i in combinations(list, 2):
print(i)
print(list(map(''.join, combinations(list, 2))))
출력 결과
(1, 2)
(1, 3)
(2, 3)
[(1, 2), (1, 3), (2, 3)]
combinations_with_replacement(iterable, r)
: iterable에서 원소 개수가 r개인 중복 조합 뽑기
from itertools import combinations_with_replacement
list = ['A, 'B', 'C']
for i in combinations_with_replacement(1, 2):
print(i)
print(list(map(''.join, combinations_with_replacement(list, 2))))
출력결과:
('A', 'A')
('A', 'B')
('A', 'C')
('B', 'B')
('B', 'C')
('C', 'C')
['AA', 'AB', 'AC', 'BB', 'BC', 'CC']
permutations(iterable, r = None)
: iterable에서 원소 개수가 r개인 순열 뽑기
from itertools import permutations
list = ['A', 'B', 'C']
for i in permutations(list): #r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다.
print(i)
print(list(map(''.join, itertools.permutations(list))))
print(list(map(''.join, itertools.permutations(list, 2)))) #2개의 원소로 수열 만들기
출력 결과
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
['AB', 'AC', 'BA', 'BC', 'CA', 'CB']
곱집합(Cartesian product)구하기 - product
iterable으로 곱집합을 구할 수 있습니다.
예시) 두 스트링 'ABCD', 'xy' 의 곱집합은 Ax Ay Bx By Cx Cy Dx Dy 입니다.
from itertools import product
list1 = ['A', 'B']
list2 = ['1', '2']
for i in product(list1, list2, repeact=1): # list1, list2의 모든 쌍을 지어 리턴한다.
print(i)
'''
출력결과:
('A', '1')
('A', '2')
('B', '1')
('B', '2')
'''
for i in product(list1, repeat=3): # product(list1, list1, list1, 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')
'''
다른 예시
import itertools
iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))
출력 결과
[('A', 'x', '1'), ('A', 'x', '2'), ('A', 'x', '3'), ('A', 'x', '4'), ('A', 'y', '1'), ('A', 'y', '2'), ('A', 'y', '3'), ('A', 'y', '4'), ('B', 'x', '1'), ('B', 'x', '2'), ('B', 'x', '3'), ('B', 'x', '4'), ('B', 'y', '1'), ('B', 'y', '2'), ('B', 'y', '3'), ('B', 'y', '4'), ('C', 'x', '1'), ('C', 'x', '2'), ('C', 'x', '3'), ('C', 'x', '4'), ('C', 'y', '1'), ('C', 'y', '2'), ('C', 'y', '3'), ('C', 'y', '4'), ('D', 'x', '1'), ('D', 'x', '2'), ('D', 'x', '3'), ('D', 'x', '4'), ('D', 'y', '1'), ('D', 'y', '2'), ('D', 'y', '3'), ('D', 'y', '4')]