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

Python에서 딕셔너리·집합·카운터의 요소 빈도가 모두 같은지 확인하는 방법

Python 프로그래밍에서 문자열이나 리스트에 포함된 각 요소의 빈도(frequency)가 서로 동일한지 확인해야 하는 경우가 있습니다. 이럴 때는 collections 모듈의 Counter 클래스를 활용하면 매우 효율적으로 처리할 수 있습니다.

기본적인 접근 방식은 다음과 같습니다. 먼저 입력 데이터를 Counter로 변환하여 각 요소의 등장 횟수를 구합니다. 그다음 빈도 값들을 set(집합)으로 변환해 중복을 제거한 뒤 리스트로 만들고, 이 리스트의 길이를 기준으로 판별합니다. 결과는 콘솔에 출력됩니다.

예제 코드

from collections import Counter
def check_all_same(my_input):
   my_dict = Counter(my_input)
   input_2 = list(set(my_dict.values()))
   if len(input_2)>2:
      print('빈도가 같지 않습니다')
   elif len(input_2)==2 and input_2[1]-input_2[0]>1:
      print('빈도가 같지 않습니다')
   else:
      print('빈도가 같습니다')

my_str = 'xxxyyyzzzzzz'
print("입력 문자열 :")
print(my_str)
check_all_same(my_str)

실행 결과

입력 문자열 :
xxxyyyzzzzzz
빈도가 같지 않습니다

코드 설명

  • 먼저 필요한 패키지인 collections 모듈에서 Counter 클래스를 가져옵니다.

  • 하나의 입력값을 매개변수로 받는 함수 check_all_same을 정의합니다.

  • 입력 데이터를 Counter 객체로 변환하여 변수에 할당합니다. Counter는 각 문자가 몇 번 나타나는지 자동으로 계산해 줍니다.

  • .values() 메서드를 사용해 딕셔너리의 값(즉, 각 요소의 빈도)에 접근합니다.

  • 빈도 값들을 set으로 변환해 중복을 제거한 후 다시 list로 변환하여 별도의 변수에 저장합니다.

  • 만약 고유한 빈도 값의 개수가 2보다 크다면, 세 가지 이상의 서로 다른 빈도가 존재한다는 의미이므로 빈도가 일치하지 않는 것입니다.

  • 고유한 빈도 값이 정확히 2개인 경우에는 두 값의 차이를 확인합니다. 차이가 1보다 크면 빈도가 일치하지 않는 것으로 판단합니다(예: 한 요소의 빈도만 1개 더 많은 경우 허용).

  • 그 외의 경우, 즉 고유한 빈도가 하나뿐이거나 차이가 1 이하라면 빈도가 동일하다고 출력합니다.

  • 함수 외부에서 예시 문자열 'xxxyyyzzzzzz'를 정의하고, 이를 인자로 전달하며 함수를 호출합니다.

  • 최종 결과가 콘솔에 출력됩니다. 위 예제에서는 x가 3번, y가 3번, z가 6번 나타나므로 빈도가 같지 않다는 결과가 나옵니다.

이 방법은 시간 복잡도 O(n)으로 문자열을 한 번만 순회하면 되기 때문에, 대용량 데이터에서도 효율적으로 빈도 균형 여부를 검사할 수 있습니다.