python的四种队列操作

一、LILO

    先进先出,只能在尾部插入元素,只能从头部取出元素

from queue import Queue
q = Queue()    # 创建队列对象
q.put(1)       # 队列尾部插入元素
q.put(2)
q.put(3)
print(q.queue) # 查看队列中的所有元素
a = q.get()    # 返回并删除队列头部元素
print(a)
print(q.queue) # 运行结果deque([2,3])

二、LIFO

    先进后出,类似栈

from queue import LifoQueue
lifoQueue = LifoQueue()  # 创建对象
lifoQueue.put(1)
lifoQueue.put(2)
lifoQueue.put(3)
print(lifoQueue.queue)
lifoQueue.get()          # 返回并删除队列尾部元素
print(lifoQueue.queue)   # 运行结果[1,2]

三、优先队列

    队列元素为元组类型,即(优先级,数据)。

from queue import PrioritQueue as pq
pq = pq()        # 创建有限队列
pq.put(1)
pq.put(4)
pq.put(3)  
print(pq.queue)  # 运行结果[1,3,4]
pq.get()         # 返回并删除优先级最低的元素
print(pq.queue)  # 运行结果[3,4]

四、双端队列

>>> from collections import deque   #双端队列
>>> dequeQueue = deque(['Eric','John','Smith'])
>>> print(dequeQueue)
deque(['Eric', 'John', 'Smith'])
>>> dequeQueue.append('Tom')    #在右侧插入新元素
>>> dequeQueue.appendleft('Terry')  #在左侧插入新元素
>>> print(dequeQueue)
deque(['Terry', 'Eric', 'John', 'Smith', 'Tom'])
>>> dequeQueue.rotate(2)    #循环右移2次
>>> print('循环右移2次后的队列',dequeQueue)
循环右移2次后的队列 deque(['Smith', 'Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.popleft()    #返回并删除队列最左端元素
'Smith'
>>> print('删除最左端元素后的队列:',dequeQueue)
删除最左端元素后的队列: deque(['Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.pop()    #返回并删除队列最右端元素
'John'
>>> print('删除最右端元素后的队列:',dequeQueue)
删除最右端元素后的队列: deque(['Tom', 'Terry', 'Eric'])

五、常用方法

    task_done()

        意味着之前入队的任务完成,由消费者线程调用。get()调用得到任务后,task_done()调用告诉队列任务处理完毕

    join()

        线程阻塞,直到队列中的所有任务处理完毕

    put(item[, block[, timeout]])

        将item放入队列

            1.timeout为正整数时,等待超时则抛出Full异常

            3.block为False时,有空间可将数据放入队列,立即抛出Full异常

    get()

        从队列中移除并返回数据

    empty()

        队列为空时返回True

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值