파이썬(Python) 리스트는 하위 리스트(sublist)를 포함할 수 있습니다. 하위 리스트란 더 큰 리스트 안에 중첩된 또 다른 리스트를 의미합니다. 이번 글에서는 주어진 리스트 안에 있는 고유한 하위 리스트의 개수를 세는 방법을 두 가지로 살펴보겠습니다.
1. Counter 클래스 활용하기
Counter는 딕셔너리(Dictionary)의 서브클래스로, 각 요소와 그 출현 횟수를 손쉽게 추적할 수 있도록 도와줍니다. 요소는 딕셔너리의 키(key)로 저장되고, 해당 요소의 개수는 값(value)으로 저장되는 순서 없는 컬렉션입니다.
아래 예제에서는 하위 리스트를 포함하는 리스트를 그대로 입력값으로 사용합니다. 각 하위 리스트를 문자열로 변환한 뒤 Counter에 전달하면, 고유한 하위 리스트별 개수가 자동으로 집계됩니다.
예제 코드
from collections import Counter
# Given List
Alist = [['Mon'],['Tue','Wed'],['Tue','Wed']]
print(Counter(str(elem) for elem in Alist))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Counter({"['Tue', 'Wed']": 2, "['Mon']": 1})결과를 보면 ['Tue', 'Wed'] 하위 리스트는 2번, ['Mon']은 1번 등장했음을 한눈에 확인할 수 있습니다.
2. append()와 반복문 활용하기
두 번째 방법은 리스트의 요소를 하나씩 순회하면서 각 하위 리스트를 튜플(tuple)로 변환하고, 동일한 요소가 나타날 때마다 카운트를 1씩 증가시키는 방식입니다. 리스트는 딕셔너리의 키로 사용할 수 없기 때문에 변경 불가능한 자료형인 튜플로 변환하는 것이 핵심입니다.
마지막에는 하위 리스트를 키로, 등장 횟수를 값으로 가지는 새로운 딕셔너리를 출력합니다.
예제 코드
# Given List
Alist = [['Mon'],['Tue','Wed'],['Tue','Wed'], ['Tue','Wed']]
# Initialize list
NewList = {}
# Use Append through Iteration
for elem in Alist:
NewList.setdefault(tuple(elem), list()).append(1)
for k, v in NewList.items():
NewList[k] = sum(v)
# Print Result
print(NewList)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
{('Mon',): 1, ('Tue', 'Wed'): 3}정리
이처럼 파이썬에서는 collections.Counter를 이용하는 간결한 방법과, 반복문과 setdefault(), append()를 조합해 직접 집계하는 방법 모두로 고유한 하위 리스트의 개수를 셀 수 있습니다. 데이터가 단순하다면 Counter를, 집계 과정을 세밀하게 제어하고 싶다면 반복문 방식을 선택하는 것이 좋습니다.