[파이썬/Python] collections 모듈 Counter 사용하기

OFNTO👋🏻·2022년 3월 1일
0

python

목록 보기
1/1

최근에 푼 알고리즘 문제에서 다른 사람은 collections를 이용해서 간단하게 푼 걸 보고 나중에 나도 써먹어야겠다 싶었다. 쓸 때마다 까먹어서 이번에 간단하게라도 정리해봐야겠다.

위에서 말한 알고리즘 문제 (프로그래머스 - 메뉴 리뉴얼)
https://programmers.co.kr/learn/courses/30/lessons/72411

collections.Counter(a)

a에서 요소들의 개수를 세서, 딕셔너리 형태로 반환

import collections

arr = ['python', 'velog', 'java', 'velog', 'velog', 'python']
print(collections.Counter(arr))


>>> Counter({'velog': 3, 'python': 2, 'java': 1})

개수가 많은 것부터 내림차순으로 출력한다.

a가 문자열일 때도 가능하다.

import collections

a = 'VELOGVELOGVEL'
print(collections.Counter(a))


>>> Counter({'V': 3, 'E': 3, 'L': 3, 'O': 2, 'G': 2})

딕셔너리 함수도 사용할 수 있다.
ex) keys(), values(), items()

import collections

arr = collections.Counter(['python', 'velog', 'java', 'velog', 'velog', 'python'])

print(arr.keys())
print(arr.values())
for key, value in arr.items():
    print(key, ':', value, '개')
    
    
>>> python : 2>>> velog : 3>>> java : 1>>> dict_keys(['python', 'velog', 'java'])
>>> dict_values([2, 3, 1])

collections.Counter 관련 함수

1. counter 연산

counter 함수로 구한 딕셔너리 값끼리 연산 가능!
( +, -, & (교집합), | (합집합)이 가능하다)

import collections

arr1 = [1,2,3,4,3,3]
arr2 = [0,1,2,2,3,3]

print(collections.Counter(arr1))
print(collections.Counter(arr2))

print(collections.Counter(arr1) + collections.Counter(arr2))
print(collections.Counter(arr1) - collections.Counter(arr2))
print(collections.Counter(arr1) & collections.Counter(arr2))
print(collections.Counter(arr1) | collections.Counter(arr2))


# 출력 결과
>>> Counter({3: 3, 1: 1, 2: 1, 4: 1})
>>> Counter({2: 2, 3: 2, 0: 1, 1: 1})

>>> Counter({3: 5, 2: 3, 1: 2, 4: 1, 0: 1})		// 덧셈
>>> Counter({3: 1, 4: 1})						// 뺄셈
>>> Counter({3: 2, 1: 1, 2: 1})					// 교집합
>>> Counter({3: 3, 2: 2, 1: 1, 4: 1, 0: 1})		// 합집합

뺄셈 결과에서 음수 값은 반환하지 않는다.

2. most_common()

collections.Counter.(arr).most_common(n)
: arr의 요소 중, 최빈값 n개를 반환 (리스트 안의 튜플 형태)
most_common() (n이 None이면) arr의 요소 모두 반환
most_common(2) arr의 요소 중 최빈값 2개 반환

import collections

arr = ['python', 'velog', 'java', 'velog', 'velog', 'python']
print(collections.Counter(arr).most_common(2))


>>> [('velog', 3), ('python', 2)]

3. subtract()

요소를 빼준다. 위의 뺄셈과 다르게 음수값도 반환된다.

import collections

arr1 = collections.Counter('ABCDEFGHIJ')
arr2 = collections.Counter('AAABBBCCCDEFF')
arr2.subtract(arr1)							// 2번째 - 1번째
print(arr2)


>>> Counter({'A': 2, 'B': 2, 'C': 2, 'F': 1, 'D': 0, 'E': 0, 'G': -1, 'H': -1, 'I': -1, 'J': -1})

0개의 댓글