파이썬 list, queue, collections(deque)

민갱·2023년 1월 25일
0

Python

목록 보기
1/11

파이썬으로 큐 구현하기

  • list
  • queue 라이브러리

list

요소를 추가할 때는 append(), 삭제할 때는 del키워드나 pop() 함수를 사용한다.

queue = list()
queue.append(a)
queue.append(b)
queue.append(c)

del queue[0]
queue.pop(0)

print(queue)
---> c

list를 사용해(append) 리스트 끝에 요소를 추가하고, 앞에서 요소를 제거하면서 큐를 구현할 수 있다.
이때 pop() 함수는 마지막 요소를 출력하기 때문에 인자 값으로 0을 넣어야 맨 앞의 요소를 제거할 수 있다.

정리

  • append : 리스트 끝에 추가
  • pop() : 맨뒤에서 요소 꺼냄
  • pop(a) : a 인덱스 위치에 요소 꺼냄
  • del list[a] : a 인덱스 위치에 요소 제거

queue 라이브러리

파이썬의 queue 라이브러리에는 Queue(), LifoQueue(), PriorityQueue()를 사용한다.

요소를 추가할 때는 put(), 꺼낼때는 get() 함수, qsize() 함수를 사용하면 큐의 크기, 요소의 개수를 알 수 있다.

Queue()

import queue
// 소문자 queue

queue = queue.Queue()

queue.put(0)
queue.put(1)
queue.put(2)

queue.get()

queue.qsize()
---> 2

Queue()는 선입선출(FIFO) 구조이기 때문에, get() 함수를 수행할 경우, 가장 먼저 추가된 요소 0이 제거된다.

LifoQueue()

import queue

queue = queue.LifoQueue()

queue.put(0)
queue.put(1)
queue.put(2)

queue.get()

queue.qsize()
---> 2

LifoQueue()는 후입선출(LIFO) 구조이기 때문에, get() 함수를 수행할 경우, 가장 마지막에 추가된 요소 2가 제거된다.

우선순위 큐 자료구조

우선순위 큐는 데이터를 추가한 순서대로 제거하는 선입선출(FIFO) 특성을 가진 일반적인 큐의 자료구조와 달리, 데이터 추가는 어떤 순서로 해도 상관이 없지만, 제거될 때는 가장 작은 값을 제거하는 독특한 특성을 지닌 자료구조다.
이 말은 내부적으로 데이터를 정렬된 상태로 보관하는 메커니즘이 있다는 뜻이고, 좀 더 구체적으로 얘기하면 heapq 모듈을 통해 구현되어 있디.

PriorityQueue()

import queue

que = queue.PriorityQueue()

que.put(4)
que.put(1)
que.put(7)
que.put(3)

print(que.get())  # 1
print(que.get())  # 3
print(que.get())  # 4
print(que.get())  # 7

=================================

que.put((3, 'Apple'))
que.put((1, 'Banana'))
que.put((2, 'Cherry'))

print(que.get()[1])  # Banana
print(que.get()[1])  # Cherry
print(que.get()[1])  # Apple

PriorityQueue()는 우선순위를 부여하여 우선순위가 가장 작은요소를 먼저 제거하는 구조이다. 때문에 요소 추가 시, 우선순위를 함께 전달한다.

만약 단순 오름차순이 아닌 다른 기준으로 원소가 정렬되기를 원한다면, (우선순위, 값) 의 튜플의 형태로 데이터를 추가하고 제거하면 된다.


다르긴 하지만 비슷하게 생긴 deque도 같이 알아보고 관련된 모듈 클래스도 알아보자!

collections

from collections import deque
// 소문자 collections

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

  • Counter
  • deque
  • defaultdict

위 세가지는 굉장히 유용하고 자주 쓰는 클래스들이다!
그리고 좀더 섬세한 사용을 위해 알아두면 좋은 클래스들이 있는데

  • OrderedDict : 3.6 이하 파이썬에서는 딕셔너리 정렬기능이 없었다! 코테용 모듈
  • namedtuple : 자바스크립트처럼 객체에 이름을 붙여 저장할 수 있게 해준다!
  • ChainMap : 두개의 딕셔너리를 맵핑해서 조합해서 보여준다!

Collections import하기

먼저, 다음과 같은 코드로 임포트할 수 있다. 대문자 소문자 주의!

from collections import deque
from collections import Counter
from collections import OrderedDict
from collections import defaultdict
from collections import namedtuple

근데 이렇게 쓰면 코드가 너무 길어져서 귀찮으므로 이런 방법도 쓸 수 있다.

import collections

count = collections.Counter([1,2,3])
deque_list = collections.deque(deque_list)

근데 이러면 뭐할때마다 collections를 앞에 붙여줘야 된다...
import 코드 복붙도 괜찮고 자주 쓰는 걸 함수화 하는 것도 좋다!

import collections

def cnts(num_list):
    return collections.Counter(num_list)

a = [1,2,3]
print(cnts(a))

>>> Counter({1: 1, 2: 1, 3: 1})

https://velog.io/@matt2550/%ED%8C%8C%EC%9D%B4%EC%8D%AC-Collections-%EB%AA%A8%EB%93%88-3%EC%A2%85-%EC%A0%95%EB%A6%AC

profile
가보자고

0개의 댓글