Python标准库系列文章目录
python内建模块
collections 模块:deque双向队列
queue module:队列、优先级队列
sortedcontainers:有序列表、有序字典和有序集合
python time module
python string module
前言
只介绍collections模块的deque类
一、deque双向队列
Methods
方法:和list的方法一样
注意:deque不支持切片操作,支持del q[n]
方法 | |
---|---|
append( value ) | 添加到右端 |
appendleft( value ) | 添加到左端 |
pop( value ) | 移除并返回最右侧的元素 |
popleft( value ) | 移除并返回最左侧的元素 |
rotate( [n=1] ) | 向右循环n个元素,若n为负数则向左循环 |
clear() | 移除所有元素,使其长度为0 |
copy() | 创建一份浅拷贝 |
count( x ) | 计算元素等于x的个数 |
Example
# 当长度超过maxlen时,多余的会被挤掉
dq = collections.deque([iterable[, maxlen]]) # 限定长度的deque队列
#限长deque提供了类似Unix tail 过滤功能
def tail(filename, n=10):
'Return the last n lines of a file'
with open(filename) as f:
return deque(f, n)
"""
一个 轮询调度器 可以通过在 deque 中放入迭代器来实现。
值从当前迭代器的位置0被取出并暂存(yield)。
如果这个迭代器消耗完毕,就用 popleft() 将其从对列中移去;
否则,就通过 rotate() 将它移到队列的末尾
"""
def roundrobin(*iterables):
"roundrobin('ABC', 'D', 'EF') --> A D E B F C"
iterators = deque(map(iter, iterables))
while iterators:
try:
while True:
yield next(iterators[0])
iterators.rotate(-1)
except StopIteration:
# Remove an exhausted iterator.
iterators.popleft()
总结
队列用collections.deque 实现比用queue.Queue快
优先级队列
- list.sort(reverse=xx, key=function_name)
- sortedcontainers.SortedList()
- queue.PriorityQueue()
参考链接:
https://docs.python.org/zh-cn/3/library/collections.html#collections.deque