ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • collections 모듈 - deque
    Engineering WIKI/Python 2022. 5. 12. 15:44

    1. deque란

    Deque(데크)는 double-ended queue 의 줄임말로, 앞과 뒤에서 즉, 양방향에서 데이터를 처리할 수 있는 queue형 자료구조를 의미한다. 아래의 [그림1]은 deque의 구조를 나타낸 그림이다.

    • python 에서 collections.deque는 list와 비슷하다. append(), pop() 등의 메소드를 deque에서도 제공한다
    • append(x)
      • list.append(x) 와 마찬가지로 x를 deque의 오른쪽(마지막)에 추가(삽입)해준다.
      # 예제1. list.append() vs deque.append()
      import collections
      # list
      lst = ['a', 'b', 'c']
      lst.append('d')
      print(lst)
      '''
      결과
      ['a', 'b', 'c', 'd']
      '''
      # collections.deque
      deq = collections.deque(['a', 'b', 'c'])
      deq.append('d')
      print(deq)
      '''
      결과
      deque(['a', 'b', 'c', 'd'])
      '''
      
      • appendleft(x)
      • 앞에서 설명했다시피, deque는 양방향에서 데이터를 처리할 수 있는 구조이다. 따라서, append(x)가 오른쪽에서 추가(삽입)을 해준다면, appendleft(x)는 왼쪽 즉, 앞쪽에서 x 를 추가(삽입)해주는 메소드이다.
      # 예제2. deque.appendleft()
      import collections
      deq = collections.deque(['a', 'b', 'c'])
      deq.appendleft('d')
      print(deq)
      '''
      결과
      deque(['d', 'a', 'b', 'c'])
      '''
      
      • extend(iterable)
      # 예제3-1. list.append() vs deque.append()
      import collections
      # list
      lst = ['a', 'b', 'c']
      lst.extend('d')
      print(lst)
      '''
      결과
      ['a', 'b', 'c', 'd']
      '''
      # collections.deque
      deq = collections.deque(['a', 'b', 'c'])
      deq.extend('d')
      print(deq)
      '''
      결과
      deque(['a', 'b', 'c', 'd'])
      '''
      # 예제3-2. 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)
      '''
      결과
      lst.extend('ef') >> ['a', 'b', 'c', 'd', 'e', 'f']
      lst2.append('ef') >> ['a', 'b', 'c', 'd', 'ef']
      '''
      
      • extendleft(iterable)
      # 예제4. extendleft()
      import collections
      deq = collections.deque(['a', 'b', 'c'])
      deq.extendleft('de')
      print(deq)
      '''
      결과
      deque(['e', 'd', 'a', 'b', 'c'])
      '''
      
      • pop()
      # 예제5. list.pop() vs deque.pop()
      import collections
      
      lst = ['a', 'b', 'c']
      print('list.pop() ->', end=' ')
      while True:
      	try:
      		print(lst.pop(), end=' ')
      	except IndexError:
      		break
      
      print()
      
      deq = collections.deque(['a', 'b', 'c'])
      print('deque.pop() ->', end=' ')
      while True:
      	try:
      		print(deq.pop(), end=' ')
      	except IndexError:
      		break
      '''
      결과
      list.pop() -> c b a
      deque.pop() -> c b a
      '''
      
      • popleft()
      # 예제6. deque.popleft()
      import collections
      
      deq = collections.deque(['a', 'b', 'c'])
      print('deque.popleft() ->', end=' ')
      while True:
      	try:
      		print(deq.popleft(), end=' ')
      	except IndexError:
      		break
      
      '''
      결과
      deque.popleft() -> a b c
      '''
      
      • rotate(n)
      # 예제7. rotate(n)
      import collections
      
      deq = collections.deque(['a', 'b', 'c', 'd', 'e'])
      deq.rotate(1)
      print('deq >>', ' '.join(deq))
      
      deq2 = collections.deque(['a', 'b', 'c', 'd', 'e'])
      deq2.rotate(2)
      print('deq2 >>', ' '.join(deq2))
      
      deq3 = collections.deque(['a', 'b', 'c', 'd', 'e'])
      deq3.rotate(-1)
      print('deq3 >>', ' '.join(deq3))
      
      deq4 = collections.deque(['a', 'b', 'c', 'd', 'e'])
      deq4.rotate(-2)
      print('deq4 >>', ' '.join(deq4))
      '''
      결과
      deq >> e a b c d
      deq2 >> d e a b c
      deq3 >> b c d e a
      deq4 >> c d e a b
      '''
      

    'Engineering WIKI > Python' 카테고리의 다른 글

    any, all 함수  (0) 2022.05.17
    operator의 itemgetter를 사용해서 리스트 정렬  (0) 2022.05.17
    collections 모듈 - OrderedDict  (0) 2022.05.12
    collections 모듈 - namedtuple  (0) 2022.05.12
    collections 모듈 - defaultdict  (0) 2022.05.12
    collections 모듈 - Counter  (0) 2022.05.12
    vars() 내장함수  (0) 2022.05.10
    파이썬 리스트 컴프리헨션  (0) 2022.05.04
Designed by Tistory.