이 글에서는 Python으로 주어진 리스트에서 가장 자주 나타나는 요소, 즉 최빈값(mode)을 찾는 다양한 방법을 살펴봅니다. 각 방법은 장단점이 있으므로 상황에 맞게 선택하여 사용하면 됩니다.
1. max()와 count() 조합하기
먼저 set() 함수를 사용해 리스트에서 중복을 제거한 고유한 요소들을 추출합니다. 그런 다음 max() 함수에 key 인자로 list.count를 전달하면, 각 고유 요소가 리스트에 등장하는 횟수를 기준으로 가장 빈도가 높은 요소를 구할 수 있습니다.
예제
# 주어진 리스트
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("주어진 리스트:\n", listA)
res = max(set(listA), key=listA.count)
print("가장 높은 빈도의 요소:\n", res)실행 결과
위 코드를 실행하면 아래와 같은 결과를 얻습니다.
주어진 리스트: [45, 20, 11, 50, 17, 45, 50, 13, 45] 가장 높은 빈도의 요소: 45
2. collections.Counter 활용하기
collections 모듈의 Counter 클래스를 사용하면 더욱 직관적으로 처리할 수 있습니다. 리스트를 Counter에 전달해 요소별 등장 횟수를 계산한 뒤, most_common() 메서드로 가장 많이 등장한 요소를 손쉽게 얻을 수 있습니다.
예제
from collections import Counter
# 주어진 리스트
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("주어진 리스트:\n", listA)
occurence_count = Counter(listA)
res = occurence_count.most_common(1)[0][0]
print("가장 높은 빈도의 요소:\n", res)실행 결과
위 코드를 실행하면 아래와 같은 결과를 얻습니다.
주어진 리스트: [45, 20, 11, 50, 17, 45, 50, 13, 45] 가장 높은 빈도의 요소: 45
3. statistics.mode() 사용하기
가장 간단한 방법은 statistics 모듈의 mode() 함수를 사용하는 것입니다. 별도의 추가 처리 없이 한 줄의 호출만으로 최빈값을 바로 얻을 수 있습니다.
예제
from statistics import mode
# 주어진 리스트
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("주어진 리스트:\n", listA)
res = mode(listA)
print("가장 높은 빈도의 요소:\n", res)실행 결과
위 코드를 실행하면 아래와 같은 결과를 얻습니다.
주어진 리스트: [45, 20, 11, 50, 17, 45, 50, 13, 45] 가장 높은 빈도의 요소: 45
마무리
세 가지 방법 모두 동일한 결과인 45를 반환합니다. 외부 모듈 import 없이 간단히 처리하고 싶다면 max()와 count() 조합이 적합하고, 요소별 빈도 정보를 함께 활용해야 한다면 Counter, 그리고 가장 짧고 명확한 코드를 원한다면 statistics.mode()를 사용하는 것이 좋습니다.