Python/Python 코테 준비

Collections 모듈 정리

안정민 2024. 2. 7. 09:11

코테를 풀다보니 정리를 할 필요성을 느끼는 것 중 하나가 바로 Collection 모듈이랑 이진 연산...

일단 오늘은 Collection 모듈부터 정리해보려고 한다.

나도 이제 4학년이니 코테를 좀 빡 준비해야하는데 그러려면 남의 코드도 보면서 쓰윽 넘기는 게 아니라 새로운 방법론이나 잘 모르는 방법론이 있으면 확실하게 배우고 그 다음 단계로 넘어가는 것이 필요할 거 같다

아 그리고 인덱스 범위 초과 오류가 제일 많이 뜨는데, 이 부분은 꼭 고치고 싶고

문제를 딱 보면 코드를 어떻게 짜야할 지 머릿속으로 구상은 잘 되는데 그걸 구현하는 게 쉬운 일이 아닌 거 같다. 연습과 학습밖에 길이 없겠지 !

일단 Collection 모듈에 대해서 정리해 보자

 


Collection 모듈은 파이썬의 자료형 (list, tuple, dict)들에게 확장된 기능을 부여하기 위해 제작된 파이썬의 내장 모듈이다. 자주 사용되는 클래스는 세 가지가 있고, 알아두면 좋을만한 것도 세 가지가 있다고 한다.

 

Counter, deque, defaultdict, namedtuple, OrderedDict 등

 


1. deque

-deque는 연속적으로 나열된 데이터의 시작 부분이나 끝 부분에 데이터를 삽입하거나 삭제할 수 있다

-또 deque는 stack 이나 queue 자료구조의 대용으로도 사용이 가능하다

-메서드

메서드 설명
appendleft(a) 원소 a를  첫 번째 인덱스에 삽입
append(a) 원소 a를 마지막 인덱스에 삽입
popleft() 첫 번째 원소를 삭제
pop() 마지막 원소를 삭제
  모든 시간 복잡도는 O(1)

 

from collections import deque

data = deque([4, 5, 6])
data.appendleft(3)
data.append(7)

print(data)
print(list(data))

 

-삽입 및 삭제 연산이 양 쪽 끝에서 이루어질 때 너무나도 편리하게 잘 사용할 거 같음 ! 굳이 다 원소 순회하지 않아도 되고 삭제 연산도 delete나 remove가 아니라 pop 연산을 지원해서 값 반환도 되는 거 같고 !


 

2. Counter

-Collection 모듈에서 제공하는 Counter는 해당 객체 내부 원소의 등장 횟수를 세어주는 기능을 한다.

from collections import Counter

data = Counter(['A', 'B', 'C', 'A', 'C'])

print(data['A'])
print(data['B'])
print(data['C'])
print(dict(data)) #사전 자료형

 

- 그냥 리스트를 바로 메소드 적용하면 안 되고, 타겟 메소드를 매개변수로 받은 카운터 객체를 생성하고 변수에 저장해서 그 아이를 활용해서 메소드를 적용해야한다.

-위와 같이 키 값을 입력하면 딕셔너리 값으로 출력

-연산자를 활용해서 특정 키에 해당하는 값을 갱신할 수 있음

-Counter에서 가장 활용적인 것이 most_common() 같아 보임

 

-Counter가 자주 쓰이는 경우는 가장 많이 나온 데이터나 가장 적게 나온 데이터를 찾을 때임

-Counter 클래스는 이와 같은 작업을 조금 더 쉽게 할 수 있도록, 데이터의 개수가 많은 순서대로 정렬된 배열을 리턴하는 most_common()이라는 메서드를 제공하고 있음

from collections import Counter

Counter('hello world').most_common()

# 출력 >>[('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]

 

-이 메서드의 인자로 정수를 넘기면, 그 정수만큼 리턴하기 때문에 가장 개수가 많은 k개의 데이터를 얻을 수 있음

from collections import Counter

Counter('hello world').most_common(1)

# 출력 >>[('l', 3)]

 

-Counter가 재미있는 부분은 바로 숫자처럼 산술 연산자를 사용할 수 있다는 점이다