collections.deque
deque(maxlen=N) 创建一个固定长度的双向队列,特点: 当新的队列已满时,会自动移除最老的那条记录.
deque与列表区别在于:
从队列两端添加或弹出元素复杂度都是O(1)。从列表的头部插入或移除元素是,列表的复杂度为O(N)
下面对deque类源码的方法功能足以介绍
class deque(MutableSequence[_T], Generic[_T]):
@property
def maxlen(self) -> Optional[int]: ...
def __init__(self, iterable: Iterable[_T] = ...,
maxlen: int = ...) -> None: ...
def append(self, x: _T) -> None: ...
def appendleft(self, x: _T) -> None: ...
def clear(self) -> None: ...
if sys.version_info >= (3, 5):
def copy(self) -> deque[_T]: ...
def count(self, x: _T) -> int: ...
def extend(self, iterable: Iterable[_T]) -> None: ...
def extendleft(self, iterable: Iterable[_T]) -> None: ...
def insert(self, i: int, x: _T) -> None: ...
def index(self, x: _T, start: int = ..., stop: int = ...) -> int: ...
def pop(self, i: int = ...) -> _T: ...
def popleft(self) -> _T: ...
def remove(self, value: _T) -> None: ...
def reverse(self) -> None: ...
def rotate(self, n: int) -> None: ...
-
maxlen:
指定队列长度,当有新的队列已满时会自动移除最老的那条记录
如果不指定队列的大小,也就得到了一个无界限的队列,可以在两端执行添加和弹出操作
from collections import deque d = deque(maxlen=2) d.append("A") d.append("B") d.append("C") d.append("D") print(d) # 输出: deque(['C', 'D'], maxlen=2)
-
apend
往队列右边添加一个元素
from collections import deque d = deque() print(d) # 输出: deque([]) d.apend("A") d.append("B") print(d) # 输出: deque(['A', 'B'])
-
appendleft
往队列左边添加一个元素
from collections import deque d = deque() d.append("A") d.append("B") d.appendleft("E") print(d) # 输出: deque(['E', 'A', 'B'])
-
clear
清空队列所有元素
-
copy
浅拷贝
-
count
返回指定元素在队列中的个数
from collections import deque d = deque() d.append("A") d.append("B") d.append("B") print(d) # 输出: deque(['A', 'B', 'B']) print(d.count("B")) # 输出: 2
-
extend
在队列右边追加一个序列
from collections import deque d = deque() d.append("A") d.append("B") d.extend([1,2,3]) print(d) # 输出: deque(['A', 'B', 1, 2, 3])
-
extendleft
在队列左边追加一个序列
from collections import deque d = deque() d.append("A") d.append("B") d.extendleft([1,2,3]) print(d) # 输出: deque([3, 2, 1, 'A', 'B'])
-
insert
在指定位置插入元素
from collections import deque d = deque() d.append("A") d.append("B") d.insert(0, 'i') print(d) # 输出: deque(['i', 'A', 'B'])
-
index
查找某个元素的索引位置
-
pop
删除队列最右边元素,并返回
from collections import deque d = deque() d.append("A") d.append("B") d.appendleft("C") print(d) # 输出: deque(['C', 'A', 'B']) print(d.pop()) # 输出: B
-
popleft
删除队列最左边元素,并返回
from collections import deque d = deque() d.append("A") d.append("B") d.appendleft("C") print(d) # 输出: deque(['C', 'A', 'B']) print(d.popleft()) # 输出: c
-
remove
删除队列指定元素
-
reverse
反转队列
-
rotate
把队列最右边元素移至左边
from collections import deque d = deque() d.append("A") d.append("B") d.append("C") d.append("D") print(d) # 输出: deque(['A', 'B', 'C', 'D']) d.rotate(1) # 参数为指定次数 print(d) # 输出: deque(['D', 'A', 'B', 'C']) d.rotate(2) print(d) # 输出: deque(['C', 'D', 'A', 'B'])