Python/05 파이썬 심화

Counter

멍멍코 2023. 9. 6. 17:21

'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