python--队列
队列queue:先进先出
import threading
import queue #队列模块
import time
def func(q):
while True:
#s=q.get() #从队列里取值.如果q里没有值,会一直处于等待状态
#q.get_nowait() #从队列里取值.如果q里没有值,会抛出异常
#z=q.qsize() #返回队列的大小
#b=q.empty() #如果队列为空,返回True, 反之False
b=q.full() #如果队列满了,返回True, 反之False
print(b)
#q.task_done() #发出信号,表示q.get()的返回数据已经被处理
time.sleep(2)
q=queue.Queue(2) #创建队列对象.参数:表示队列的最多数据个数
t=threading.Thread(target=func,args=(q,)).start()
for i in range(5):
x=input('请输入数据:')
q.put(x) #往队列里放入数据;队列满,就等待
#q.put_nowait(x) #往队列里放入数据,存放前队列为空,就抛出异常
time.sleep(1)
q.join() #等待队列q中的数据全部执行完毕,再继续【所有的数据都q.task_done()之后】
LifoQueue队列:后进先出
import threading
import queue #队列模块
import time
def func(q):
while True:
time.sleep(1)
#s=q.get() #从队列里取值.如果q里没有值,会一直处于等待状态
#s=q.get_nowait() #从队列里取值.如果q里没有值,会抛出异常
z=q.qsize() #返回队列的大小
#b=q.empty() #如果队列为空,返回True, 反之False
#b=q.full() #如果队列满了,返回True, 反之False
print(z)
#q.task_done() #发出信号,表示q.get()的返回数据已经被处理
q=queue.LifoQueue() #创建队列对象.参数:表示队列的最多数据个数
t=threading.Thread(target=func,args=(q,)).start()
for i in range(5):
q.put(i) #往队列里放入数据;队列满,就等待
#q.put_nowait(x) #往队列里放入数据,存放前队列为空,就抛出异常
#q.join() #等待队列q中的数据全部执行完毕,再继续【所有的数据都q.task_done()之后】
deque(双向队列)
需要 from collections import deque
双向队列:既可以在前面放数据,也可以在后面放数据;既可以在前面取数据,也可以在后面取数据
d =deque() #创建双向队列
d =deque([1,2]) 创建时可以赋值
d.append(10) #从右边放数据
d.appendleft(100) #从左边放数据
例子
d =deque() #创建双向队列
d.append(10) #从右边放数据
d.append(20)
d.append(30)
d.appendleft(100) #从左边放数据
d.appendleft(200)
d.appendleft(300)
print(d)
结果 deque([300, 200, 100, 10, 20, 30])
x=d.pop() 从右边取数据
队列中没有数据就抛出异常
x=d.popleft() 从左边取数据
队列中没有数据就抛出异常
d.clear() 清空数据
e=d.copy() 把双向队列复制给e,复制后d和e的地址不相同
x=d.count(20) 返回指定元素的出现次数
没有返回0
d.extend([1000,2000]) 在队列的右边放入列表的元素
按循序放入
d.extendleft([1000,2000]) 在队列的左边放入列表的元素
按循序放入
x=d.index(200) 查找某个元素的索引位置
队列左边第一个数据的索引是0
参数1 元素
参数2 可选 查找的起始位置
参数3 可选 查找的结束位置
找不到 抛出异常
d.insert(2,'z') 在指定位置插入元素
参数1 位置
参数2 元素
如果指定位置大于最大序列号,就插入到最右边
d.remove(200) 删除指定元素
只删除左边找到的第一个
d.reverse() 队列反转
d.rotate(2) 把右边元素放到左边
参数 指定次数,默认1次
优先级队列PriorityQueue
import threading
import queue #队列模块
import time
def func(q):
while True:
time.sleep(1)
s=q.get() #从队列里取值.如果q里没有值,会一直处于等待状态,先取级别高的
#s=q.get_nowait() #从队列里取值.如果q里没有值,会抛出异常
#z=q.qsize() #返回队列的大小
#b=q.empty() #如果队列为空,返回True, 反之False
#b=q.full() #如果队列满了,返回True, 反之False
print(s)
#q.task_done() #发出信号,表示q.get()的返回数据已经被处理
q=queue.PriorityQueue() #创建队列对象.参数:表示队列的最多数据个数
t=threading.Thread(target=func,args=(q,)).start()
q.put(10) #往队列里放入数据;队列满,就等待;
q.put(50)
#q.put_nowait(x) #往队列里放入数据,存放前队列为空,就抛出异常
#q.join() #等待队列q中的数据全部执行完毕,再继续【所有的数据都q.task_done()之后】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)