본문 바로가기

파이썬

[PYTHON] Collections.Count()

728x90

2) Counter.items()

1. collections.Counter() 

   1) 입력형태

import collections
lst = ['aa', 'cc', 'dd', 'aa', 'bb', 'ee']
# 입력이 list 형식
print(collections.Counter(lst))
#dictionary 형태를 변환
>>>Counter({'aa': 2, 'cc': 1, 'dd': 1, 'bb': 1, 'ee': 1})

# 입력이 dic 형식
dic={'가': 3, '나': 2, '다': 4})
# 입력을 크기 순으로 dic dic형태로 반환
print(collections.Counter(dic)
>>>Counter({'다': 4, '가': 3, '나': 2})

# 문자 = 숫자 형태
print(collections.Counter(a=1, b=3, c=2))
>>>Counter({'b': 3, 'c': 2, 'a': 1})

# string 형태
print(collections.Counter('aaagasdgsdd'))
>>>Counter({'a': 4, 'd': 3, 'g': 2, 's': 2})

 2 )관련 메소드

1) Counter.keys()

c=collections.Counter({'a': 3, 'b': 2, 'c': 4})
print(list(c.keys()))
>>>['a', 'b', 'c', 'd']

2) Counter.elements()

c=collections.Counter({'a': 3, 'b': 2, 'c': 4})
print(list(c.elements()))
>>>['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'c']
# 다음과 같이 정렬도 가능
print(sorted(c.elements(),revers=True))
>>>['c', 'c', 'c', 'c', 'b', 'b', 'a', 'a', 'a']

3) Counter.items()

c=collections.Counter({'a': 3, 'b': 2, 'c': 4})
print(c.items())
for key,num in c.items():
  print(key,num)

 

dict_items([('a', 3), ('b', 2), ('c', 4)])
a 3
b 2
c 4

4) Counter.update()

c=collections.Counter({'a': 3, 'b': 2, 'c': 4})
# 원소를 추가해줌
c.update({'f':3,'c':2})
print(c)
>>>Counter({'c': 6, 'a': 3, 'f': 3, 'b': 2})
# string 형태도 가능
c.update('jkkl')
print(c)
>>>Counter({'c': 6, 'a': 3, 'f': 3, 'b': 2, 'k': 2, 'j': 1, 'l': 1})

5) Counter.most_common()

c2 = collections.Counter('apple, orange, grape')
print(c2.most_common())
>>>[('a', 3), ('p', 3), ('e', 3), (',', 2), (' ', 2), ('r', 2), ('g', 2), ('l', 1), ('o', 1), ('n', 1)]
# 상위 3개를 보여줌
print(c2.most_common(3))
>>>[('a', 3), ('p', 3), ('e', 3)]

 3 )Counter 간 연산

 

1) Counter.subtract()

a = collections.Counter(a=4, b=2, c=0, d=-2)
b = collections.Counter(a=1, b=2, c=3, d=4)
a.subtract(b)
print(a)
>>>Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

2) +(합집합), | (합집합), - , &(교집합)

s1 = collections.Counter('apple')
s2 = collections.Counter('banana')
# 합집합
print(s1 + s2)
>>>Counter({'a': 4, 'p': 2, 'n': 2, 'l': 1, 'e': 1, 'b': 1})
print(s1|s2)
>>>Counter({'a': 3, 'p': 2, 'n': 2, 'l': 1, 'e': 1, 'b': 1})
# 차집합
print(s1-s2)
>>>Counter({'p': 2, 'l': 1, 'e': 1})
# 교집합
print(s1&s2)
>>>Counter({'a': 1})

 

Counter간 연산을 통해 아래 문제를 해결해보면 좋을 것 같습니다 ㅎㅎ

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

 

 

 

 

 

반응형

'파이썬' 카테고리의 다른 글

[PYTHON] zip()  (0) 2021.12.14
[PYHTHON] 정규표현식  (0) 2021.12.14
[PYTHON] string 관련 함수  (0) 2021.12.11
[PYTHON] set()  (0) 2021.12.08
[PYTHON] strip([char])  (0) 2021.12.05