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

Python 리스트에서 가장 많이 등장하는 요소의 빈도 계산하기


Python 프로그래밍에서 nums라는 숫자 리스트가 주어졌을 때, 리스트 안에서 가장 자주 등장하는 요소를 찾고, 그 요소가 총 몇 번 나타나는지 빈도를 구하는 방법을 알아보겠습니다.

예를 들어 입력 리스트가 [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]이라면, 숫자 5가 세 번 등장하므로 출력 결과는 3이 됩니다.

알고리즘: 단계별 접근 방법

이 문제는 두 개의 중첩 반복문을 사용해 모든 요소 쌍을 서로 비교하는 방식으로 해결할 수 있습니다. 해결 과정은 다음과 같습니다.

  • 최대 빈도를 저장할 변수 max를 0으로 초기화합니다.
  • length 변수에 nums 리스트의 크기를 저장합니다.
  • i를 0부터 length-2까지 반복합니다.
    • count를 1로 초기화합니다.
    • j를 i+1부터 length-1까지 반복합니다.
      • nums[i]와 nums[j]가 같다면 count를 1 증가시킵니다.
      • max가 count보다 작다면 max 값을 count로 갱신합니다.
  • 모든 반복이 끝나면 max를 반환합니다.

아래 예제 코드를 통해 실제 구현 방법을 확인해 보겠습니다.

구현 예제

class Solution:
    def solve(self, nums):
        max = 0
        length = len(nums)
        for i in range(0, length - 1):
            count = 1
            for j in range(i + 1, length):
                if nums[i] == nums[j]:
                    count += 1
                    if max < count:
                        max = count
        return max

ob = Solution()
nums = [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]
print(ob.solve(nums))

입력

[1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]

출력

3

더 효율적인 방법: collections.Counter 활용

위 방식은 모든 요소 쌍을 비교하므로 시간 복잡도가 O(n²)입니다. 따라서 리스트의 크기가 커지면 성능이 크게 저하될 수 있습니다. Python 표준 라이브러리의 collections.Counter를 사용하면 O(n)의 시간 복잡도로 훨씬 간단하고 빠르게 해결할 수 있습니다.

from collections import Counter

def solve(nums):
    counter = Counter(nums)
    return counter.most_common(1)[0][1]

nums = [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]
print(solve(nums))  # 출력: 3

Counter는 리스트 내 각 요소의 출현 횟수를 딕셔너리 형태로 계산해 주며, most_common(1) 메서드는 빈도가 가장 높은 요소를 (요소, 빈도) 형태의 튜플로 반환합니다. 따라서 [0][1] 인덱싱을 통해 최대 빈도 값만 손쉽게 추출할 수 있습니다. 실무에서는 대용량 데이터 처리 시 Counter 방식을 사용하는 것이 권장됩니다.