[Algorithm, Python] itertools - 자주쓰는 파이썬 라이브러리

이혜지·2022년 5월 25일
0

Algorithm

목록 보기
8/12

알고리즘을 하면서 자주 쓰는 라이브러리가 정해져있다.
그걸 계속 까먹어서 나 그만 까먹으라고 정리하는 글 !!!

itertools : 효율적인 루핑을 위한 이터레이터를 만드는 함수

itertools에는 여러가지 함수들이 많은데, 그중 자주쓰는것들은
combinations(), permutations(), product(), combinations_with_replacement()정도가 있다.

혹시나 집고 넘어가자면

  • 순열: 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게 선택하는 혹은 나열하는 것을 순열(permutation)이라고 한다.
  • 조합:조합론에서 조합(組合, 문화어: 무이, 영어: combination)은 서로 다른 n개의 원소를 가지는 어떤 집합 (사실, 집합은 서로 다른 원소의 모임으로 정의된다.)

    나는 맨날 헷갈려서 ㅋㅋ

조합(combinations)

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)

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']

데카르트 곱(product)

곱집합(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')]

참고: https://m.blog.naver.com/alwaysneoi/100151898175

profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글