python 中的双向队列deque
class collections.deque([iterable[, maxlen]])
deque
是一个线程安全,可以快速在两端操作的数据类型。
如果maxlen没有指定,那么deque可以无限增长;反之,deque满了之后,再有新的元素加入时,就会从另一端删除旧元素。
常用函数
函数 | 说明 |
---|---|
append(x) | |
appnedleft(x) | |
clear() | |
copy() | 浅拷贝 |
extend(iterable) | |
extendleft | |
insert(index,value) | 如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError。 |
pop() | 返回并删除队头 |
popleft() | |
remove(value) | 移除找到的第一个 value。 如果没有的话就引发 ValueError。 |
revere() | |
rotate(n) | 如果n>0,向右循环移动n步,如果n<0,向左循环移动n步。原地操作 |
count(value) | value的个数 |
index(value) | 若value不存在,会引起ValueError |
代码示例
In [1]: from collections import deque
In [2]: s=deque(range(5),10)
In [3]: s
Out[3]: deque([0, 1, 2, 3, 4])
#extend后元素数目超过maxlen,因此删除左侧元素
In [5]: s.extend(range(5,11))
In [6]: s
Out[6]: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [7]: s.rotate(5)
In [8]: s
Out[8]: deque([6, 7, 8, 9, 10, 1, 2, 3, 4, 5])
In [9]: s.index(22)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-9-ead4934e3f4c> in <module>
----> 1 s.index(22)
ValueError: 22 is not in deque
参考:
- 流畅的python
- deque 文档