728x90
반응형
collections.Counter(iterbale)
iterbale 객체의 각 요소의 등장 횟수를 세는 기능
리스트에 음수가 있으면 안됨 !!!!!!!!!!!!!!!
import collections
a = [1,2,3,1,2,3,3,4]
b = collections.Counter(a) : 등장 횟수 많은것 부터 dict{값:등장횟수} 로 돌려줌
Counter({3: 3, 1: 2, 2: 2, 4: 1})
c = b.most_common() : 리스트[튜플()]로 변환하여 반환
[(3, 3), (1, 2), (2, 2), (4, 1)]
d = b.elements() : 카운터된 개수만큼 요소 반환
list(d)
[1, 1, 2, 2, 3, 3, 3, 4]
list(b)
[1, 2, 3, 4]
그럼 음수값이 포함된 리스트에서 등장 횟수를 어떻게 구할까?
아주 큰 수를 더하여 음수를 양수로 바꿔서 풀면 됩니다.
ex) 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
= 모든 값에 4000을 더하면 반드시 0보다 커짐
input : [-1,-1,-2,-2]
→ input에 4000씩 모두 더하고 시작
array = [3999, 3999, 3998, 3998]
print(collections.Counter(array).most_common()[0][0]-4000)
→ -1
import numpy np (백준에서는 지원 안됩니다)
print(np.bincount(array).argmax()-4000)
→ -2
Q. numpy의 경우에는 왜 이런 결과가 나올까?
bincount()는 0부터 가장큰 값 까지 등장횟수 순서대로 나열
argmax() 함수는 array에서 가장 큰 값 들고오는데 여러개 있으면 가장 처음 만나는 것 들고옴
그래서 3999이 아니라 3998 값을 가져옴.
3998-4000 = -2
반복문을 사용하지 않고 각 요소를 원하는 개수만큼 리스트로 생성
import collections
mycounter = collections.Counter (a = 1, b = 2, c = 3)
print(list(mycounter.elements()))
['a', 'b', 'b', 'c', 'c', 'c']
import collections
map_arr = {'a':1, 'b':2, 'c':3}
mycounter = collections.Counter (map_arr)
print(list(mycounter.elements()))
['a', 'b', 'b', 'c', 'c', 'c']
문자열에 a~z가 각각 몇 개 등장하는지 카운트
import sys,collections,string
s = sys.stdin.readline().rstrip()
arr = {}
for i in string.ascii_lowercase:
arr[i] = 0
for key,value in dict(collections.Counter(s)).items():
arr[key] = value
for i in string.ascii_lowercase:
sys.stdout.write(str(arr[i]) + ' ')
반응형
'Python > 라이브러리' 카테고리의 다른 글
파이썬(python) 라이브러리 - collections.deque (0) | 2021.04.22 |
---|---|
파이썬(python) 라이브러리 - bisect (이진탐색, 바이너리 서치, Binary Search) (0) | 2021.04.21 |
파이썬(python) 유용한 표준 라이브러리 (0) | 2021.04.21 |
파이썬(python) 라이브러리 - itertools (순열, 조합, 누적합) (0) | 2021.04.21 |
파이썬 라이브러리 - datetime (0) | 2021.03.23 |