• 技术文章 >后端开发 >Python教程

    聊聊 Python 的双向队列

    coldplay.xixicoldplay.xixi2020-10-27 17:09:09转载404

    Python教程今天介绍双向队列。

    虽然可以使用 Python 列表的 .append 和 .pop 方法模拟栈或者队列,但删除列表的第一个元素或者在第一个元素之前添加一个新元素,都非常耗时。因为需要把列表中的所有元素向后移动。

    Python 的双向队列使用 collections.deque 类来实现。它是一个线程安全且可以快速从两端添加或者删除元素的类。

    deque /dɛk/

    也可以利用 collections.deque 类来实现缓存。首先先指定缓存队列的大小,然后从队首删除过期元素和在队尾添加新元素。

    Luciano Ramalho 举了一个示例来说明双向队列的基本用法。

    from collections import deque
    
    dq = deque(range(10), maxlen=10)
    logging.info('dq -> %s', dq)
    
    dq.rotate(3)
    logging.info('dq -> %s', dq)
    
    dq.rotate(-4)
    logging.info('dq -> %s', dq)
    
    dq.extend([11, 22, 33])
    logging.info('dq -> %s', dq)
    
    dq.extendleft([10, 20, 30, 40])
    logging.info('dq -> %s', dq)复制代码

    运行结果:

    INFO - dq -> deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
    INFO - dq -> deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
    INFO - dq -> deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
    INFO - dq -> deque([4, 5, 6, 7, 8, 9, 0, 11, 22, 33], maxlen=10)
    INFO - dq -> deque([40, 30, 20, 10, 4, 5, 6, 7, 8, 9], maxlen=10)复制代码
    1. maxlen 是 deque 的可选参数,用于指定队列容量,即可以放多少个元素。
    2. rotate() 方法可以旋转队列。它有一个入参 n ,当 n >0时,队列从最右边开始的 n 个元素会被移动到左边。当 n <0时,队列从最左边开始的 n 个元素会被移动到右边。
    3. extend() 方法可以为队列添加新元素,它接受一个列表作为入参,会把列表中的所有元素添加到队列中。新的元素放置在队列右边。
    4. 如果在添加新元素时发现队列已满,这时就会自动删除队首的元素。
    5. extendleft(iter) 方法是把新增的元素放置在队列左边。其它特性与 extend() 方法相同。

    双向队列也不是完美的,如果从队列中间位置删除元素就比较慢,因为它只针对队列的头尾操作做了优化。

    相关免费学习推荐:python教程(视频)

    以上就是聊聊 Python 的双向队列的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:juejin,如有侵犯,请联系admin@php.cn删除
    专题推荐:Python 双向队列
    上一篇:python面试常见问题有哪些 下一篇:python爬虫经典例子有哪些
    大前端线上培训班

    相关文章推荐

    • PHP双向队列,双端队列代码• python3 deque(双向队列)的详细介绍• PHP实现一个双向队列

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网