Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 리스트에서 고유 요소 개수 구하기 – Counter와 set() 활용법

Python의 리스트에는 중복된 요소가 포함될 수 있습니다. len() 함수로 리스트의 길이를 확인하면 중복 요소까지 모두 포함한 전체 길이가 반환되는데, 실제 작업에서는 중복을 제거한 고유(distinct) 요소의 개수가 필요한 경우가 많습니다. 이번 글에서는 리스트에서 고유 요소만 추출하고 그 개수를 세는 여러 가지 방법을 살펴보겠습니다.

Collections 모듈의 Counter 활용하기

collections 모듈의 Counter 클래스는 해시 가능한(hashable) 객체를 세기 위해 만들어진 딕셔너리(dict)의 서브클래스입니다. Counter에서는 각 요소가 딕셔너리의 로 저장되고, 해당 요소의 등장 횟수가 으로 저장됩니다. 따라서 Counter의 키만 추출하면 중복이 제거된 고유 요소 목록을 얻을 수 있으며, 그 길이를 구하면 곧 고유 요소의 개수가 됩니다.

from collections import Counter

list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
print("원본 리스트의 길이", len(list))

distinct_list = (Counter(list).keys())
print("고유 요소로 이루어진 리스트:\n", distinct_list)
print("고유 리스트의 길이:", len(distinct_list))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

원본 리스트의 길이 5
고유 요소로 이루어진 리스트:
    dict_keys(['Mon', 'Tue', 'Wed'])
고유 리스트의 길이: 3

원본 리스트는 5개의 요소를 가지고 있지만, 'Mon'과 'Tue'가 각각 두 번씩 등장하므로 고유 요소는 'Mon', 'Tue', 'Wed' 세 개뿐입니다.

set()으로 더 간단하게 처리하기

등장 횟수 같은 추가 정보가 필요 없고 단순히 고유 요소의 개수만 구하려면 set()을 사용하는 것이 가장 간결합니다. 집합(set)은 중복을 허용하지 않는 자료형이므로, 리스트를 집합으로 변환한 뒤 길이를 구하면 됩니다.

list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
unique_count = len(set(list))
print("고유 요소의 개수:", unique_count)  # 3

요소 순서를 유지하면서 중복 제거하기

집합은 순서를 보장하지 않기 때문에, 원본 리스트의 순서를 그대로 유지한 채 중복을 제거하고 싶다면 Python 3.7 이상에서 dict.fromkeys()를 활용할 수 있습니다. 딕셔너리는 삽입 순서를 유지하므로 아래와 같이 작성하면 순서가 보존된 고유 요소 리스트를 얻을 수 있습니다.

list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
ordered_distinct = list(dict.fromkeys(list))
print(ordered_distinct)  # ['Mon', 'Tue', 'Wed']

정리

요소별 등장 횟수까지 함께 확인하려면 Counter를, 단순히 개수만 필요하다면 set()을, 순서 유지가 중요하다면 dict.fromkeys()를 사용하는 것이 좋습니다. 상황에 맞는 방법을 선택하면 중복 제거 로직을 더욱 효율적으로 작성할 수 있습니다.