python 实现队列

mlto / 2023-08-14 / 原文

官方文档不推荐使用列表 因为列表删除第一个元素会把剩余元素向左移一位 速度很慢 官方推荐的是 collections下的deque 

记录一下 防止忘记 

from collections import deque

 

d = deque(‘内容’,maxlength) 内容可以是推导式 也可以直接写内容 内容写在一起 比如'123' 结果会自动分割成[’1‘,’2‘,’3‘]三个元素 想写成一个元素可以写成列表 [’123‘] maxlength是最大长度 设置了以后 deque达到最大长度 再增加不会成功 但不会报错 

 

相关函数 

append(x) 在最后插入 x 

 

appendleft(x) 在最左端插入 x

 

clear() 移除所有元素

 

copy() 创建一份浅拷贝

 

count(x) 统计deque中等于x元素的个数 

 

extend(推导式/内容) 往deque最后追加内容 

 

extendleft(推导式/内容) 往deque左边增加内容 添加的内容会被反过来 

 

index(x,[start],[end]) 返回x第一次出现的位置 start和end是范围 可以不写 如果没有 引发ValueError

 

insert(c,x) 在c的位置 插入x 如果超出maxlength限制 引发IndexError

 

pop() 移除最后一个元素 返回值是该元素 如果是空deque 引发IndexError

 

popleft() 移除最左侧元素 返回值是该元素 如果是空deque 引发IndexError

 

remove(value) 移除第一个value 如果没有的话 引发ValueError

 

reverse() 将deque元素逆序排列 

 

rotate(n=1) 把deque向右循环一位 一下子有点难理解 等效于最后一个元素移到第一 其他元素向后移动一位 负数即向左循环移动一位 

 

 

属性

只读属性 maxlen 最大长度 没有就是None 

 

除了以上操作,deque 还支持迭代、封存、len(d)reversed(d)copy.copy(d)copy.deepcopy(d)、成员检测运算符 in 以及下标引用例如通过 d[0] 访问首个元素等。 索引访问在两端的复杂度均为 O(1) 但在中间则会低至 O(n)。 如需快速随机访问,请改用列表