Algorithm

[python] collections 모듈 연습

Jaaaay 2022. 6. 6. 16:12

1. collections 모듈

collections 모듈에선 namedtuple(), OrderedDict, Counter, defaultdict, deque 등을 제공한다. (tuple, dict에 대한 확장 데이터 구조를 제공)

Counter 클래스는 파이썬의 기본 자료구조인 사전(dictionary)의 확장(자식 클래스)이다.즉, 사전에서 제공하는 API를 그대로 사용할 수 있다.

2. 준비

다음과 같이 임포트하여 바로 사용하면 된다.

from collections import Counter

사용 할 때에는 다음과 같이 list이나 string을 Counter안에 넣고인스턴스로 만들어서 사용.

text = "Hello my name is"
li = [1,2,3,"d","d",1,1,2,"go"]

c = Counter(text)
d = Counter(li)

3. 사용법

3-1. 카운터끼리 합차, 교집합, 합집합

# Counter의 합차
a = Counter(a=5, b=3)
b = Counter(b=5, c=2)

e = a+b
#Counter({'b': 8, 'a': 5, 'c': 2})
e = a-b
#Counter({'a': 5})
# Counter의 &(교집합), |(합집합) 연산
a = Counter(a=5, b=3)
b = Counter(b=2, c=4)

a&b
# Counter({'b': 2})
a|b
# Counter({'a': 5, 'c': 4, 'b': 3})

3-2. subtract()와 update() 메소드

a = Counter(a=5, b=3)
b = Counter(b=5, c=2)

a.subtract(b)
#Counter({'a': 5, 'b': -2, 'c': -2})
b.update(a)
#Counter({'b': 8, 'a': 5, 'c': 2})

3-3. del

c = Counter("Hello my name is")

del c['H']
list(c)
#['e', 'l', 'o', ' ', 'm', 'y', 'n', 'a', 'i', 's']

3-4. clear() 메소드

c = Counter("Hello my name is")

c.clear()
c
#Counter()

3-5. most_common() 메소드

text = "Hello my name is"
li = ['1','2','3',"d","d",'1','1','2',"go", 'l', 'H']
c = Counter(text)
d = Counter(li)

# most_common()은 빈도수로 정렬된 값을 튜플 리스트 형태로 반환해준다.
print(c.most_common())
print(d.most_common())
# [(' ', 3), ('e', 2), ('l', 2), ('m', 2), ('H', 1), ('o', 1), ('y', 1), ('n', 1), ('a', 1), ('i', 1), ('s', 1)]
# [(1, 3), (2, 2), ('d', 2), (3, 1), ('go', 1)]

# most_common()에 인수로 정수를 넣으면 상위 몇 개의 값을 반환해준다.
print(c.most_common(1))
print(d.most_common(2))
# [(' ', 3)]
# [(1, 3), (2, 2)]

3-6. 기타등등

text = "Hello my name is"
li = ['1','2','3',"d","d",'1','1','2',"go", 'l', 'H']
c = Counter(text)
d = Counter(li)

# list 형태로 sort된 key값을 받을 수 있다.
print(sorted(c))
#[' ', 'H', 'a', 'e', 'i', 'l', 'm', 'n', 'o', 's', 'y']

# 이렇게 사용하면 itertools 주소값 반환됨
print(c.elements())
print(d.elements())

# key값 요소 value만큼 반복해서 반환
print(''.join(sorted(c.elements())))
print(''.join(sorted(d.elements())))
#    Haeeillmmnosy
# 111223ddgo

# key값 요소 한 번씩 리스트 형태로 반환
print(list(c))
print(list(d))
# ['H', 'e', 'l', 'o', ' ', 'm', 'y', 'n', 'a', 'i', 's']
# ['1', '2', '3', 'd', 'go']

# key값 요소 카운터 된 숫자만큼 리스트 형태로 반환
print(list(c.elements()))
print(list(d.elements()))
# ['H', 'e', 'e', 'l', 'l', 'o', ' ', ' ', ' ', 'm', 'm', 'y', 'n', 'a', 'i', 's']
# ['1', '1', '1', '2', '2', '3', 'd', 'd', 'go']

# lambda 사용하여 배열
sorted_C_union = sorted(c.items(), key=lambda x: (-x[1], x[0]))
print(sorted_C_union)
# [(' ', 3), ('e', 2), ('l', 2), ('m', 2), ('H', 1), ('a', 1), ('i', 1), ('n', 1), ('o', 1), ('s', 1), ('y', 1)]

# 길이(개수) 구하기
print(sum(c.values()))
# 16

'Algorithm' 카테고리의 다른 글

[algorithm][python] 정렬  (0) 2022.06.06
[algorithm][python] DFS, BFS  (0) 2022.06.06
[algorithm][python] stack, queue  (0) 2022.06.06
[python] isalpha, isalnum/ isnumeric, isdigit, isdecimal 함수  (0) 2022.06.06
[python] lambda 표현식  (0) 2022.06.06