개요
알고리즘 문제를 풀다 보면 문자열이나 리스트에서 연속적인 부분을 찾아야 하는 문제를 찾아볼 수 있다. 직접 순회하면서 확인하는 방법도 있지만, 이번 글에서는 itertools의 groupby를 사용해 찾아보려고 한다.
iterrtools.groupby
groupby는 연속적인 키과 그룹을 반환하는 iterator를 만든다. 키는 각 요소에 대한 키 값을 계산하는 함수로, 지정하지 않으면 항등 함수로 기본 설정된다. 키 값이 변경될 때마다 그룹이 새로 생성되기 때문에 기본적으로 정렬된 상태에서 사용해야 한다.
사용 예시
예로 들어 abbbaaaa라는 문자열에서 연속적인 부분을 찾으려고 한다.
from itertools import groupby
str_input = 'abbbaaaa'
for k, val in groupby(sorted(str_input)):
print(f'{k}: {list(val)}')
정렬하면 a는 5번, b는 3번 연속된 부분이 있는 것을 알 수 있다. 반면 정렬하지 않고 실행하면 다음과 같다.
from itertools import groupby
str_input = 'abbbaaaa'
for k, val in groupby(str_input):
print(f'{k}: {list(val)}')
정렬했을 때와 달리, a가 1번 그리고 4번 연속된 부분이 있는 것을 확인할 수 있다.
정렬 여부에 따라 결과가 달라지기 때문에 필요에 맞게 적절히 입력 데이터를 가공해야 할 필요가 있겠다.
참고 문서
https://docs.python.org/3/library/itertools.html#itertools.groupby
728x90