deque模块详解

deque的全称是double-ended queue
最近在pythonTip做题的时候,遇到了deque模块,以前对其不太了解,现在特此总结一下deque模块是python标准库collections中的一项,它提供了两端都可以操作的序列,这意味着,在序列的前后你都可以执行添加或删除操作
deque模块 - 图1

1.创建deque序列:

  1. from collections import deque
  2. d=deque()

2.deque提供了类似list的操作方法:

  1. d=deque()
  2. d.append(3)
  3. d.append(8)
  4. d.append(1)

那么此时d=deque([3,8,1])。

3.两端都使用pop:

  1. d=deque(‘12345’)

那么d=deque([‘1’, ‘2’, ‘3’, ‘4’, ‘5’])
d.pop()抛出的是’5’, d.leftpop()抛出的是’1’,可见默认pop()抛出的是最后一个元素

4.限制deque的长度

  1. d=deque(maxlen=20)
  2. for i in range(30):
  3. d.append(str(i))

此时d的值为d=deque([‘10’, ‘11’, ‘12’, ‘13’, ‘14’, ‘15’, ‘16’, ‘17’, ‘18’, ‘19’, ‘20’, ‘21’, ‘22’, ‘23’, ‘24’, ‘25’, ‘26’, ‘27’, ‘28’, ‘29’], maxlen=20),可见当限制长度的deque增加超过限制数的项时,另一边的项会自动删除。

5.添加list各项到deque中:

  1. d=deque([1,2,3,4,5])
  2. d.extend([0])

那么此时d=deque([1,2,3,4,5,0])

  1. d.extendleft([6,7,8])

d.extendleft表示在左边添加,此时d=deque([8, 7, 6, 1, 2, 3, 4, 5, 0])

6.deque的rotate方法

  1. # 顺时针
  2. q = collections.deque([1, 2, 3, 4])
  3. q.rotate(1)
  4. print(q) # [4, 1, 2, 3]
  5. q.rotate(1)
  6. print(q) # [3, 4, 1, 2]
  7. # 逆时针
  8. q = collections.deque([1, 2, 3, 4])
  9. q.rotate(-1)
  10. print(q) # [2, 3, 4, 1]
  11. q.rotate(-1)
  12. print(q) # [3, 4, 1, 2]