본문 바로가기
Engineering WIKI/Python

collections 모듈 - deque

by wonos 2022. 5. 12.

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