'Counter'는 파이썬의 'collections' 모듈에 포함된 클래스로, 주로 해시 가능한 객체의 개수를 세는 데 사용됩니다. 대부분의 경우, 이 클래스는 리스트나 문자열에서 각 요소의 빈도수를 쉽게 구할 수 있게 해줍니다.
Counter의 주요 특징
1. 생성
'Counter'는 다양한 입력 형태로부터 객체를 생성할 수 있습니다. 예를들어, 리스트, 튜플, 문자열, 딕셔너리 등의 입력을 받아 빈도수를 계산할 수 있습니다.
2. 메서드
- 'most_common([n])' : 가장 흔하게 등장하는 n개의 요소와 그들의 빈도수를 반환합니다.
- 'elements()' : 요소를 빈도수만큼 반복하여 반환합니다.
- 'subtract([iterable-or-mapping])' : 빈도수를 감소시킵니다.
Counter 사용 예제
1. 리스트에서 사용
from collections import Counter
colors = ['blue', 'blue', 'red', 'yellow', 'green', 'red']
counter = Counter(colors)
print(counter) # Counter({'blue': 2, 'red': 2, 'yellow': 1, 'green': 1})
2. 문자열에서 사용
word = "mississippi"
counter = Counter(word)
print(counter) # Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})
3. 가장 흔하게 등장하는 요소 찾기
counter = Counter('abracadabra')
print(counter.most_common(3)) # [('a', 5), ('b', 2), ('r', 2)]
4. 빈도수 감소
c1 = Counter(a=3, b=2, c=1)
c2 = Counter(a=1, b=2, c=3)
c1.subtract(c2)
print(c1) # Counter({'a': 2, 'b': 0, 'c': -2})
'Counter'는 내부적으로 딕셔너리(dictionary)와 유사하게 동작하며, 기본적으로 딕셔너리 메서드('keys()', 'values()', 'items()' 등)도 사용할 수 있습니다.
Counter 문제 적용
최빈값 구하기(프로그래머스)
1. 'freq = Counter(array)'
• 'array'의 각 원소의 빈도수를 계산하여 'Counter' 객체를 생성합니다.
• 만약 'array'가 [1, 2, 3, 3, 3, 4] 라면 'freq'는 'Counter({1: 1, 2: 1, 3: 3, 4: 1})가 됩니다
2. 'max_freq = freq.most_common(1)[0][1]'
• 'most_common(1)' 메서드는 'array'에서 가장 빈번하게 나타나는 원소를 반환합니다.
• 이 메서드는 튜플의 리스트로 결과를 반환하며, 각 튜플은 '(원소, 빈도수)' 형태로 구성됩니다.
• 'most_common(1)[0]'을 통해 가장 빈번한 원소와 그 빈도수를 나타내는 첫 번째 튜플을 가져옵니다.
• '[0][1]'을 통해 해당 튜플에서 빈도수만을 추출합니다.
• 따라서, 'max_freq'에는 가장 높은 빈도수 값이 저장됩니다.
예를 들어, 'array'가 [1, 2, 3, 3, 3, 4]라면, 'max_freq'는 3이 될 것입니다.
3. 'freq.items()'
• 'freq.items()'는 'Counter' 객체인 'freq'의 원소와 그 원소의 빈도수를 튜플 형태로 반환하는 메서드 입니다.
• 'freq.items()'의 반환값은 다음과 같은 형태로 나옵니다.
[(원소1, 원소1의 빈도수), (원소2, 원소2의 빈도수), ...]
예를 들어, 'array'가 [1, 2, 3, 3, 3, 4]일 경우, 'freq'는 'Counter({1: 1, 2: 1, 3: 3, 4: 1})'입니다.
따라서 'freq.items()'는 다음과 같은 값을 반환합니다.
[(1, 1), (2, 1), (3, 3), (4, 1)]
이 리스트는 'for num, freq in freq.items()' 구문에서 순회되며, 각 원소의 값과 그 빈도수를 각각 'num'과 'freq' 변수에 할당합니다.
'Python > 05 파이썬 심화' 카테고리의 다른 글
sort() sorted() (0) | 2023.09.07 |
---|---|
set (0) | 2023.09.06 |
math (0) | 2023.09.06 |
str.maketrans() (0) | 2023.09.06 |
내장 함수 (1) | 2023.08.31 |