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

Python – 행의 빈도가 유사한지 테스트하는 방법

2차원 리스트(리스트의 리스트)를 다루다 보면, 각 행에 포함된 요소들이 서로 같은 빈도로 나타나는지 확인해야 하는 경우가 있습니다. 이럴 때 파이썬에서는 all 함수, collections 모듈의 Counter 클래스, 그리고 간단한 반복 처리를 조합하면 손쉽게 해결할 수 있습니다.

Counter는 리스트 내 각 요소의 등장 횟수를 딕셔너리 형태로 세어 주는 도구이므로, 두 행의 빈도 분포를 비교하는 데 매우 유용합니다. 아래에서 실제 예제를 통해 살펴보겠습니다.

예제 코드

from collections import Counter

my_list = [[21, 92, 64, 11, 3], [21, 3, 11, 92, 64], [64, 92, 21, 3, 11]]

print("The list is :")
print(my_list)

my_result = all(dict(Counter(row)) == dict(Counter(my_list[0])) for row in my_list)

if(my_result == True):
    print("All rows have similar frequency")
else:
    print("All rows do not have similar frequency")

실행 결과

The list is :
[[21, 92, 64, 11, 3], [21, 3, 11, 92, 64], [64, 92, 21, 3, 11]]
All rows have similar frequency

코드 설명

  • collections 모듈에서 Counter 클래스를 임포트하여 환경에 준비합니다.

  • 정수로 구성된 중첩 리스트를 정의하고, 콘솔에 출력하여 원본 데이터를 확인합니다.

  • 반복 과정에서 각 내부 리스트(행)를 Counter 객체로 변환한 뒤, 다시 딕셔너리 형태로 바꿉니다. 이렇게 하면 요소별 등장 횟수를 쉽게 비교할 수 있습니다.

  • all() 함수와 제너레이터 표현식을 사용해, 모든 행의 요소 빈도가 첫 번째 행과 동일한지 한 번에 검사합니다.

  • 검사 결과인 불리언 값(True/False)을 변수에 저장합니다.

  • 저장된 불리언 값에 따라 조건문으로 분기하여, 해당하는 메시지를 콘솔에 출력합니다.

이 예제에서는 세 행 모두 동일한 숫자들을 다른 순서로 담고 있으므로, 요소 빈도가 서로 같아 "All rows have similar frequency"라는 결과가 출력됩니다. 만약 특정 행에서 요소가 누락되거나 개수가 달라지면 즉시 False가 반환되어 다른 메시지가 표시됩니다.