월하점
월하점의 개발 공부 일지
월하점
전체 방문자
오늘
어제
  • 분류 전체보기 (96)
    • Back-end (3)
    • PROJECT (1)
    • CS (15)
      • Operating System (0)
      • Network (4)
      • Data Structure (7)
      • Algorithm (0)
      • Database (4)
    • Problem Solving (52)
    • Programming Languages (1)
      • Javascript (0)
      • Python (1)
      • JAVA (0)
    • Codestates BEB 4기 (7)
    • Blockchain (12)
    • Linux (2)
    • Git (1)
    • 잡다한 (2)

공지사항

인기 글

태그

  • Python
  • node.js
  • 알고리즘
  • CS
  • 네트워크
  • 프로그래머스
  • SWEA
  • 자료구조
  • javascript
  • baekjoon
  • django

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
월하점

월하점의 개발 공부 일지

  • HOME
  • GUEST
  • WRITE
Programming Languages/Python

파이썬의 deque : 사용법과 장점, 그리고 list 와의 비교

2022. 5. 30. 00:11

1. list VS. deque

자료구조의 큐(queue) 특징
  • 선입선출(FIFO)
  • 단방향

파이썬의 list

  • fixed size memory blocks(array)
  • 링크드 리스트 (X), 고정된 사이즈의 메모리를 갖는 array (O)
  • 따라서, 마지막 원소를 삭제하는 연산은 O(1)의 시간복잡도를 갖지만
  • 첫번째 원소 삭제 시 O(n)의 시간복잡도를 가진다
       * 첫번째 원소를 삭제하면 삭제 후 남은 모든 원소를 앞으로 이동시키기 때문

파이썬의 deque

  • 양방향 큐 (deque: double-ended queue의 줄임말)
  • double-linked list로 구현되어 있다
  • 큐의 앞, 뒤 양쪽 방향에서 element를 추가하거나 제거할 수 있다
  • 그러므로 맨 앞의 element를 삭제해도 시간복잡도는 O(1)이다
  • 삽입 삭제 연산 속도가 최적화되어있다
  • 양 끝 엘리먼트의 추가(append) 삭제(pop)이 일반적인 리스트보다 빠르다

 

맨 앞 엘리먼트 삽입 삭제 연산의 시간 복잡도

- 리스트 : O(n)

- deque : O(1)

 

 

 

2. deque 의 쓰임

  • 스택처럼 구현해서 사용할 수 있으며
  • 큐처럼 구현해서 사용할 수도 있다
  • 삽입 삭제 연산이 빈번한 알고리즘에서 리스트보다 속도면에서 월등하다

 

 

3. deque 메소드

deque 사용 시 선언 필요!
from colloections import deque
dq = deque()
  • deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
  • deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
  • deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가한다.
  • deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가한다.
  • deque.remove(item): item을 데크에서 찾아 삭제한다.
  • deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽).

* 리스트처럼 insert(), remove(), reverse(), index() 메소드도 사용 가능하다.

 

 

저작자표시 비영리 변경금지 (새창열림)
    월하점
    월하점
    개발 공부를 기록합니다. 웹을 위주로 공부하며 컴퓨터과학 이론도 함께 정리할 계획입니다.

    티스토리툴바