안녕하세요.
오늘은 코딩테스트나 실제로 자주 사용되는 Python 내부 모듈 itertools에 대해 알아보겠습니다.
파이썬 itertools 모듈 설명
▣ itertools란?
Python 내장 라이브러리로 자신만의 반복자를 만드는 모듈입니다. 무엇인가 반복되는 요소에 대한 처리나 특정 배열에 대하여 순열이나 조합을 만들어야 할 때 유용하게 사용될 수 있습니다.
▣ 라이브러리 import
import itertools
▣ 유용한 itertools 메소드
반복자(generator) | 인수 | 결과 |
product() | p,q.../ repeat = 1 | 중첩된 loop 반복문에 해당하는 데카르트의 곱 |
permutations() | p [,r] | r 길이 tuple, 가능한 모든 순서, 반복 X |
combinations() | p, r | r 길이 tuple, 정렬된 순서, 반복 X |
combinations_with_replacement() | p, r | r 길이 tuple, 정렬된 순서, 반복 O |
① product
데카르트 곱이라고도 하는 cartesian product를 표현할 때 사용하는 메소드로, 두 개 이상의 리스트의 모든 조합을 구할 때 주로 사용된다.
from itertools import product
example = ["가나다", "abc", "123"]
pd = list(product(*example)) # *는 리스트 내 경우의 수 구하기
print(pd) # 3 X 3 X 3 = 27 경우의 수
[('가', 'a', '1'), ('가', 'a', '2'), ('가', 'a', '3'),
('가', 'b', '1'), ('가', 'b', '2'), ('가', 'b', '3'),
('가', 'c', '1'), ('가', 'c', '2'), ('가', 'c', '3'),
('나', 'a', '1'), ('나', 'a', '2'), ('나', 'a', '3'),
('나', 'b', '1'), ('나', 'b', '2'), ('나', 'b', '3'),
('나', 'c', '1'), ('나', 'c', '2'), ('나', 'c', '3'),
('다', 'a', '1'), ('다', 'a', '2'), ('다', 'a', '3'),
('다', 'b', '1'), ('다', 'b', '2'), ('다', 'b', '3'),
('다', 'c', '1'), ('다', 'c', '2'), ('다', 'c', '3')]
② 순열 : permutations
순열을 표현할 때 사용되는 메소드로, 한 리스트에서 중복을 허용하고 모든 경우의 수를 구할 때 사용된다. 반환되는 항목의 수는 n! / (n-r)!이다.
from itertools import permutations
example = [1, 2, 3]
perm = list(permutations(example, 2))
print(perm)
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
③ 조합 : combinations
조합을 표현할 때 사용되는 메소드로, 한 리스트에서 중복을 허용하지 않고 모든 경우의 수를 구할 때 사용된다. 반환되는 항목의 수는 n! / (n - r)!r!이다.
from itertools import combinations
example = ['a', 'b', 'c']
cb = list(combinations(example, 2))
print(cb)
[('a', 'b'), ('a', 'c'), ('b', 'c')]
④ combinations_with_replacement()
combinations와 동일, 반복 여부에서 차이가 있다.
s = ['ㄱ','ㄴ','ㄷ','ㄹ']
k = 2
from itertools import combinations_with_replacement
c = list(combinations_with_replacement(s,k))
for i in c:
print(''.join(i))
ㄱㄱ
ㄱㄴ
ㄱㄷ
ㄱㄹ
ㄴㄴ
ㄴㄷ
ㄴㄹ
ㄷㄷ
ㄷㄹ
ㄹㄹ
itertools 예제 및 풀이
프로그래머스에 있는 itertools 모듈의 permutations/combinations를 활용한 예제와 풀이를 아래의 링크 통해서 올려놓았습니다. 관심 있으신 분들은 참고하시기를 바랍니다. 감사합니다.
<itertools 예제>
2020.11.01 - [코딩테스트/프로그래머스] - [Programmers] 프로그래머스 파이썬 > 월간 코드 챌린지 시즌1 > 두 개 뽑아서 더하기
2020.09.03 - [코딩테스트/프로그래머스] - [Programmers] 2019 카카오 > 후보키
2020.08.23 - [코딩테스트/프로그래머스] - [Programmers] 2020 카카오 인턴십 > 수식 최대화
'Programming > Python' 카테고리의 다른 글
파이썬 리스트 중복 제거 (방법 및 예시) (0) | 2021.11.29 |
---|---|
파이썬 haversine 위경도 거리 계산하기 (0) | 2021.11.19 |
파이썬 문제 및 연습 사이트 추천 (5) | 2021.08.03 |
[파이썬] 유튜브 댓글 크롤링 (BTS MV) (3) | 2021.07.19 |
파이썬 한글 자음 모음 조합하기 (NLP) (4) | 2021.07.17 |
댓글