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

Python 딕셔너리로 리스트 요소 빈도 계산하기

이 글에서는 리스트에 포함된 각 요소가 몇 번 등장하는지 빈도(frequency)를 계산하는 파이썬 프로그램을 만들어 보겠습니다. 빈도 계산은 데이터 분석, 로그 처리, 중복 제거 등 다양한 상황에서 자주 사용되는 기본기이므로 몇 가지 방법을 확실히 익혀두면 유용합니다.

1. 딕셔너리(Dictionary) 활용하기

가장 대표적인 방법은 딕셔너리를 사용하는 것입니다. 리스트의 각 항목을 딕셔너리의 키(key)로 저장하고, 그 항목이 등장한 횟수를 값(value)으로 기록합니다. 반복문을 순회하면서 이미 존재하는 키라면 값을 1씩 증가시키고, 처음 등장한 키라면 1로 초기화하면 됩니다.

예제 코드

my_list = ['a', 'b', 'a', 'c', 'd', 'c', 'c']
frequency = {}

for item in my_list:
    if item in frequency:
        frequency[item] += 1
    else:
        frequency[item] = 1

for key, value in frequency.items():
    print("%s -> %d" % (key, value))

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

a -> 2
b -> 1
c -> 3
d -> 1

참고로 예제 코드에서는 변수 이름을 list 대신 my_list로 사용했습니다. list는 파이썬의 내장 타입이므로 같은 이름의 변수를 선언하면 내장 함수를 덮어써(shadowing) 이후 코드에서 오류를 일으킬 수 있기 때문입니다.

2. count() 메서드 활용하기

두 번째 방법은 파이썬에 내장된 count() 메서드를 사용하는 것입니다. count()는 특정 항목이 리스트 안에 몇 번 등장하는지 바로 반환해 주므로, 각 항목마다 호출하여 결과를 딕셔너리에 저장하면 됩니다.

예제 코드

my_list = ['a', 'b', 'a', 'c', 'd', 'c', 'c']
frequency = {}

for item in my_list:
    frequency[item] = my_list.count(item)

for key, value in frequency.items():
    print("%s -> %d" % (key, value))

실행 결과

a -> 2
b -> 1
c -> 3
d -> 1

다만 count()는 호출될 때마다 리스트 전체를 한 번씩 순회하므로, 리스트가 크거나 요소 종류가 많으면 성능이 떨어질 수 있다는 점을 유의해야 합니다.

3. (추가) collections.Counter 활용하기

실무에서는 표준 라이브러리인 collections.Counter를 사용하는 것이 가장 간결하고 효율적입니다. 단 한 줄로 빈도 계산이 끝나며, 가장 많이 등장한 요소를 찾는 most_common() 같은 편리한 기능도 함께 제공됩니다.

예제 코드

from collections import Counter

my_list = ['a', 'b', 'a', 'c', 'd', 'c', 'c']
frequency = Counter(my_list)

print(frequency)
print(frequency.most_common(1))  # 최빈값 확인

실행 결과

Counter({'c': 3, 'a': 2, 'b': 1, 'd': 1})
[('c', 3)]

마무리

정리하면, 직접 구현하며 원리를 이해하고 싶다면 딕셔너리 방식, 간단하게 작성하고 싶다면 count() 방식, 성능과 편의성을 모두 챙기고 싶다면 collections.Counter를 사용하는 것이 좋습니다. 상황에 맞는 방법을 선택해 활용해 보세요.