리스트에 포함된 요소들의 분수 빈도(fractional frequency)를 구해야 하는 경우가 있습니다. 여기서 분수 빈도란 각 요소가 현재까지 등장한 횟수를 전체 등장 횟수로 나눈 값을 의미합니다. 예를 들어 어떤 요소가 리스트 전체에서 2번 등장하고 현재 첫 번째 등장이라면 '1/2'로 표현됩니다.
이러한 계산은 딕셔너리 컴프리헨션(dictionary comprehension), 간단한 반복문, 그리고 collections 모듈의 Counter 메서드를 활용하면 손쉽게 구현할 수 있습니다.
예제 코드
아래는 실제 동작을 보여주는 예시입니다 −
from collections import Counter
my_list = [14, 15, 42, 60, 75, 50, 45, 55, 14, 60, 48, 65]
print("The list is :")
print(my_list)
my_num = {index : 0 for index in set(my_list)}
my_denominator = Counter(my_list)
my_result = []
for element in my_list:
my_num[element] += 1
my_result.append(str(my_num[element]) + '/' + str(my_denominator[element]))
print("The result is :")
print(my_result)출력 결과
The list is : [14, 15, 42, 60, 75, 50, 45, 55, 14, 60, 48, 65] The result is : ['1/2', '1/1', '1/1', '1/2', '1/1', '1/1', '1/1', '1/1', '2/2', '2/2', '1/1', '1/1']
코드 설명
collections모듈에서Counter클래스를 임포트하여 사용할 수 있도록 준비합니다.정수로 이루어진 리스트를 정의하고, 콘솔에 출력하여 확인합니다.
딕셔너리 컴프리헨션과
set()을 활용해 리스트의 고유한 요소들만 추출하고, 각 요소의 값을 0으로 초기화한 딕셔너리를 생성합니다.생성된 딕셔너리는 변수에 할당되어 각 요소의 현재 등장 횟수(분자)를 추적하는 데 사용됩니다.
Counter를 이용해 리스트 내 각 요소의 전체 등장 횟수(분모)를 미리 계산해 둡니다.결과를 저장할 빈 리스트를 하나 정의합니다.
원본 리스트를 순회하면서 각 요소의 등장 횟수를 1씩 증가시키고,
'/'문자를 기준으로 '현재 횟수/전체 횟수' 형태의 문자열을 만든 뒤append메서드로 결과 리스트에 추가합니다.최종적으로 완성된 결과 리스트가 콘솔에 출력됩니다.
결과 해석
출력 결과를 살펴보면 값 14와 60은 리스트에서 두 번씩 등장하기 때문에 '1/2', '2/2' 형태로 표시됩니다. 반면 한 번만 등장하는 요소들은 '1/1'로 표시됩니다. 이처럼 분수 빈도를 활용하면 각 요소가 몇 번째 등장인지, 그리고 전체적으로 몇 번 등장했는지를 직관적으로 파악할 수 있습니다.