Python

[Python] itertools.groupby - 연속적인 부분 찾기

비번변경 2025. 3. 13. 17:40

개요

알고리즘 문제를 풀다 보면 문자열이나 리스트에서 연속적인 부분을 찾아야 하는 문제를 찾아볼 수 있다. 직접 순회하면서 확인하는 방법도 있지만, 이번 글에서는 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

https://wikidocs.net/108940

  

728x90