[Python]队列---双向队列实现介绍及应用
2023-09-11 14:22:09 时间
队列:
队列分为:普通队列、环形队列、双向队列
双向队列
定义:
两端都可以做进队与出队操作
操作:
队首进队
队首出队
队尾进队
队尾出队
双向队列在python现成的模块使用collections下面的deque
新建一个空队列
from collections import deque
dq = deque()
dq.append(1) #队首进队
print(dq.popleft()) #队首出队
print(dq.popleft()) #IndexError: pop from an empty deque
新建一个有值队列
# 新建一个有值队列
dq = deque([1,2,3])
dq.append(1) #队首进队
print(dq.popleft()) #队首出队 1
print(dq.popleft()) #2
新建一个有值队列,并设置长度,如果队满仍有值进入,冲掉原来的值
# 新建一个有值队列,并设置长度,如果队满仍有值进入,冲掉原来的值
dq = deque([1, 2, 3, 4, 5], 5)
print(dq)
dq.append(6) # 队首进队
print(dq)
print(dq.popleft()) # 2
print(dq.popleft()) # 3
打印结果:
deque([1, 2, 3, 4, 5], maxlen=5)
deque([2, 3, 4, 5, 6], maxlen=5)
2
3
可以看出在6进入队列之前,队列中有[1, 2, 3, 4, 5]5个元素,并且maxlen也是5,在6进入到队列后,原来位于开头的1因空间只有5个长度而被挤掉,现在的结果是[2, 3, 4, 5, 6],并且maxlen还是5,所以在后面两步dq.popleft()
的时候分别取出的值的2、3;
应用场景:
日志查看
在linux系统中我们经常使用tail
,命令进行显示指定文件末尾几行,这里我们借助双向队列实现这个功能;
在实现之前需要提前准备一个模拟日志文件,我在这里准备了一个test.txt文件,里面象征性的放置一些便于区分的文字, 比如每行的数据就是行号:
代码实现:
def tail(n):
with open('test.txt','r') as f:
a = deque(f,n)
print(a)
return a
#打印后5行日志
for i in tail(5):
print(i)
结果展示:因每行末尾有个换行符,python在做文件读取操作的时候没做处理,原义转换成了换行符:
这样就简单实现了tail
的功能;
相关文章
- PySide6 : Qt for Python 教程
- Python 修改 pip 源为国内源
- Python在测试中的应用
- Python kafka操作实例(kafka-python)
- 地球引擎初级教程——Python API 语法(内涵JavaScript转python工具包介绍)
- Python 在运维中应用有多重要
- python的列表推导式和生成器表达式对比
- 零基础自学Python需要多长时间从入门到精通?学python能兼职挣钱吗?怎么挣钱?
- 面试整理:分享50道硬核Python编程题,面试前过一遍
- Python 格林威治时间格式 Wed Jul 10 20:00:09 +0800 2019 转换为标准时间格式年月日时分秒%Y-%m-%d %H:%M:%S
- 【Python】【Flask】框架
- Python numpy 矩阵乘法multiply()、dot()、 matmul()、‘ * ‘、‘@‘辨析
- 免费分享:python数据分析与应用(第2版)(微课版)
- psnr的定义和python实现
- python学习之OpenCV-Python模块的部分应用示例(生成素描图和动漫图)
- Python 教程之如何使用 Python 通过 Web Scraping 赚钱(教程含工具)
- Python 教程之如何使用 matplotlib 在 python 中绘制数学函数
- 《Python自动化运维:技术与最佳实践》一导读
- python数据类型:序列(字符串,元组,列表,字典)
- 小学生python游戏编程arcade----烟花粒子
- Python 常见问题 之 python 安装包下载安装速度慢 的 快速解决方法(之一)
- python进行机器学习(一)之数据预处理
- python中的函数---函数应用