双端队列deque学习

时间:2021-02-14 19:24:47
In [19]: from collections import deque                                                         
创建deque对象,并存入0-9 设置最大长度为10,这一旦设置就无法更改
In [20]: dq = deque(range(10),maxlen=10)                                                       

In [21]: dq                                                                                    
Out[21]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
dq.rotate(n),队列的旋转,参数n>0,队列最右边n个元素会被移到队列的左边,n<0时,队列左边的n个元素,移动到队列的右边
In [22]: dq.rotate(3)                                                                          

In [23]: dq                                                                                    
Out[23]: deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6])

In [24]: dq.rotate(-4)                                                                         

In [25]: dq                                                                                    
Out[25]: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
在队列左边插入元素,因队列长度限制,会把最右边的元素挤出队列
In [26]: dq.appendleft(-1)                                                                     

In [27]: dq                                                                                    
Out[27]: deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])
extend(iter),参数为可迭代的列表之类的,在队列的最右边插入元素,把左边多余的元素挤出队列
In [28]: dq.extend([11,22,33])       

  In [30]: dq
  Out[30]: deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33])

  extendleft(iter),在队列的左边插入元素,逆序插入

  In [31]: dq.extendleft([55,66,77,88])

  In [32]: dq
  Out[32]: deque([88, 77, 66, 55, 3, 4, 5, 6, 7, 8])