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

Python – 리스트에서 누적 행 빈도 계산하기

리스트에 포함된 요소들의 누적 행 빈도(cumulative row frequency)를 계산해야 하는 경우, collections 모듈의 Counter 메서드와 리스트 컴프리헨션(list comprehension)을 함께 사용하면 간단하게 해결할 수 있습니다.

Counter란?

Counter는 해시 가능한(hashable) 객체를 키로, 그 개수를 값으로 저장하는 딕셔너리의 하위 클래스입니다. 리스트 내 각 요소가 몇 번 등장하는지 손쉽게 집계할 수 있어 빈도 계산에 매우 유용합니다.

예제 코드

다음은 중첩 리스트(리스트의 리스트)에서 특정 요소들이 각 행마다 몇 번 나타나는지 누적하여 계산하는 예제입니다.

from collections import Counter

my_list = [[11, 2, 32, 4, 31], [52, 52, 3, 71, 71, 3], [1, 3], [19, 19, 40, 40, 40]]

print("입력 리스트 :")
print(my_list)

my_element_list = [19, 2, 71]

# 각 행별로 요소의 빈도를 Counter 객체로 생성
my_frequency = [Counter(element) for element in my_list]

# 찾고자 하는 요소들이 각 행에 등장한 총 횟수를 합산
my_result = [sum([freq[word] for word in my_element_list if word in freq]) for freq in my_frequency]

print("결과 행렬 :")
print(my_result)

실행 결과

입력 리스트 :
[[11, 2, 32, 4, 31], [52, 52, 3, 71, 71, 3], [1, 3], [19, 19, 40, 40, 40]]
결과 행렬 :
[1, 2, 0, 2]

코드 설명

  • collections 모듈에서 Counter 클래스를 임포트합니다.

  • 중첩 리스트를 정의하고 콘솔에 출력하여 확인합니다.

  • 빈도를 세고 싶은 대상 요소들을 담은 정수 리스트([19, 2, 71])를 별도로 정의합니다.

  • 리스트 컴프리헨션을 사용해 각 행을 순회하면서 Counter로 해당 행의 요소별 빈도를 계산하고, 그 결과를 변수에 할당합니다.

  • 다시 한 번 리스트 컴프리헨션으로 각 행의 빈도 정보를 순회하며, 대상 요소가 해당 행에 존재하는 경우에만 그 빈도 값을 더해 누적 합계를 구합니다.

  • 최종 결과를 변수에 저장한 뒤 콘솔에 출력합니다.

결과 해석

결과 리스트 [1, 2, 0, 2]를 보면 다음과 같이 해석할 수 있습니다.

  • 첫 번째 행 [11, 2, 32, 4, 31]에는 대상 요소 중 2가 1번 포함되어 있으므로 결과는 1입니다.

  • 두 번째 행 [52, 52, 3, 71, 71, 3]에는 71이 2번 포함되어 있으므로 결과는 2입니다.

  • 세 번째 행 [1, 3]에는 대상 요소가 하나도 없으므로 결과는 0입니다.

  • 네 번째 행 [19, 19, 40, 40, 40]에는 19가 2번 포함되어 있으므로 결과는 2입니다.

이처럼 Counter와 리스트 컴프리헨션을 조합하면 반복문을 복잡하게 작성하지 않고도 간결하고 가독성 좋은 코드로 누적 빈도를 계산할 수 있습니다.