본문 바로가기
Programming/Python

[Python] 파이썬 collections.deque 모듈 사용하기

by @__100.s 2021. 8. 18.
반응형

deque(데크)란?

  • deque는 앞과 뒤에서 데이터를 처리할 수 있는 양방향 자료형이다.

  • 양방향이기 때문에 스택(Stack)처럼 써도 되고 큐(Queue)처럼 써도 된다.

  • collections.deque 모듈은 deque 자료형을 생성하는 모듈이다.

      from collections import deque
      deq = deque()

리스트(list)와 비슷한 데크(deque)

  • 데크(deque)의 사용법은 리스트(list)와 거의 흡사하다. collections.deque의 메소드들 중 리스트(list)와 차이를 보이는 메소드 위주로 살펴보겠다.

데크(deque)에 요소추가 : append(item)

  • list.append(item)과 마찬가지로 item을 dequeue의 오른쪽(마지막)에 추가해준다.

      deq = deque(['a', 'b', 'c'])
      deq.append('d')
    
      print(deq)
    
      # print 결과값 =>
       deque(['a', 'b', 'c', 'd'])

데크(deque) 왼쪽에 요소추가 : appendleft(item)

  • 데크(deque)는 양방향에서 데이터를 처리할 수 있다. appendleft(item)은 왼쪽, 즉 앞쪽에서 item을 추가해주는 메소드이다.

      deq = deque(['a', 'b', 'c'])
      deq.appendleft('d')
    
      print(deq)
    
      # print 결과값 =>
       deque(['d', 'a', 'b', 'c'])

주어진 배열을 순환하며 데크(deque)에 요소추가 : extend(iterable)

  • list.extend(iterable)과 마찬가지로 iterable argument(list, str, tuple...)의 요소를 하나씩 반환하여 오른쪽(마지막)에 추가해준다.

    • interable argument : arguments의 각 요소를 하나씩 반환 가능한 object를 의미한다.

      deq = deque(['a', 'b', 'c'])
      deq.extend('d')
      
      print(deq)
      
      # print 결과값 =>
      deque(['a', 'b', 'c', 'd'])

      append vs extend

      lst2 = ['a', 'b', 'c', 'd']
      lst2.append('ef') # append()
      lst.extend('ef') # extend()
      
      print("lst.extend('ef') >> ", lst)
      print("lst2.append('ef') >>", lst2)
      
      # print 결과값 =>
      lst.extend('ef') >> ['a', 'b', 'c', 'd', 'e', 'f']
      lst2.append('ef') >> ['a', 'b', 'c', 'd', 'ef']

주어진 배열을 순환하며 데크(deque) 왼쪽에 요소추가 : extendleft(iterable)

  • extendleft(iterable)는 appendleft(item)와 마찬가지로 왼쪽(앞쪽)에서 데이터를 추가해주준다.

      deq = deque(['a', 'b', 'c'])
      deq.extendleft('de')
    
      print(deq)
    
      # print 결과값 =>
      deque(['e', 'd', 'a', 'b', 'c']

데크(deque)의 요소삭제 : pop()

  • list.pop() 과 같이 오른쪽(마지막) 요소를 가져오는 동시에 데크(deque)에서 삭제한다.

      deq = deque(['a', 'b', 'c'])
      deq.pop()
    
      >>> 'c'

데크(deque) 왼쪽에서 요소삭제 : popleft()

  • 왼쪽(앞쪽) 요소를 가져오는 동시에 데크(deque)에서 삭제한다.

      deq = deque(['a', 'b', 'c'])
      deq.popleft()
    
      >>> 'a'

데크(deque)의 요소 회전 : rotate(n)

  • rotate(n)은 요소들을 n값 만큼 회전해주는 메소드이다.

  • n의 값이 음수(negative)이면 왼쪽으로, 양수(positive)이면 오른쪽으로 회전한다.

      deq = deque(['a', 'b', 'c', 'd', 'e'])
    
      deq.rotate(1)
      print(deq)
    
      # print 결과값 =>
      deque(['e', 'a', 'b', 'c', 'd'])
    
      deq.rotate(-1)
      print(deq)
    
      # print 결과값 =>
      deque(['a', 'b', 'c', 'd', 'e'])
    

참조

반응형

'Programming > Python' 카테고리의 다른 글

[Python] input()과 sys.stdin.readline()의 차이  (0) 2021.08.17
[Python] Heapq 모듈 사용하기  (0) 2021.08.17