python中的deque双向队列详解

 更新时间:2023年09月13日 10:17:41   作者:Yake1965  
这篇文章主要介绍了python中的deque双向队列详解,相比 list 实现的队列,deque 拥有更低的时间和空间复杂度,list 实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),需要的朋友可以参考下

python deque(双向)队列

Python 标准库中包含了四种队列,分别是 queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque

在这里插入图片描述

相比 list 实现的队列,deque 拥有更低的时间和空间复杂度。list 实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),deque 在出队(pop)和入队(append)时的时间复杂度是O(1)。 所以 deque 更有优越性,而且 deque 既可以表示队列又可以表示栈。

in 操作符

q = collections.deque([1, 2, 3, 4])
print(5 in q)  # False
print(1 in q)  # True

rotate 旋转

# 顺时针
q = collections.deque([1, 2, 3, 4])
q.rotate(1)
print(q)  # [4, 1, 2, 3]
q.rotate(1)
print(q)  # [3, 4, 1, 2]
# 逆时针
q = collections.deque([1, 2, 3, 4])
q.rotate(-1)
print(q)  # [2, 3, 4, 1]
q.rotate(-1)
print(q)  # [3, 4, 1, 2]

copy

 d.append(1)
 d.append(2)
 deque([1, 2])
 d1 = d.copy()
 deque([1, 2])

extend

 d.clear()
 d.append(1)
 d.extend([3,4,5])
 deque([1, 3, 4, 5])

extendleft

 d.clear()
 d.append(1)
 d.extendleft([3,4,5])
deque([5, 4, 3, 1])

index

 d.extend(["a","b","c","d","e","f"])
deque(['a', 'b', 'c', 'd', 'e','f'])
 d.index("c",0,4) #指定查找的区间
 d.index("c",0,2)
error...
d.insert(位置,元素)  在指定位置插入元素
d.remove(元素)   删除指定元素
d.reverse   队列翻转 

请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。

若队列为空,pop_front 和 max_value 需要返回 -1

输入: [“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”] [[],[1],[2],[],[],[]] 输出: [null,null,null,2,1,2]

既然时间复杂度是O(1)

from collections import deque
class MaxQueue:
    def __init__(self):
        self.d = deque()
    def max_value(self) -> int:
        return max(self.d) if self.d else -1
    def push_back(self, value: int) -> None:
        self.d.append(value)
    def pop_front(self) -> int:
        return self.d.popleft() if self.d else -1

到此这篇关于python中的deque双向队列详解的文章就介绍到这了,更多相关deque双向队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+PyQt5编写一个批量图片添加水印工具(附源码)

    Python+PyQt5编写一个批量图片添加水印工具(附源码)

    这篇文章主要为大家详细介绍了如何基于PyQt5开发的批量图片水印添加工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-02-02
  • 基于python求两个列表的并集.交集.差集

    基于python求两个列表的并集.交集.差集

    这篇文章主要介绍了基于python求两个列表的并集.交集.差集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 基于Python实现计算纳什均衡的示例详解

    基于Python实现计算纳什均衡的示例详解

    纳什均衡是一种博弈论中的概念,它描述了一种平衡状态,其中每个参与者都不能通过独立改变其决策来提高自己的利益。本文就来用Python中的Nashpy和PuLP实现计算纳什均衡,感兴趣的可以了解一下
    2023-02-02
  • 判断python字典中key是否存在的两种方法

    判断python字典中key是否存在的两种方法

    这篇文章主要介绍了判断python字典中key是否存在的两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Python使用openpyxl与pandas读取Excel文件的对比详解

    Python使用openpyxl与pandas读取Excel文件的对比详解

    在 Python 数据处理与分析场景中,Excel 文件作为经典的数据存储格式,其读取与操作效率直接影响开发流程,openpyxl具备精细化操作单元格、样式设置、图表编辑等底层能力;而 pandas 依托强大的数据结构与矢量化运算,本文对两种工具进行全方位对比
    2025-12-12
  • Python寻找路径和查找文件路径的示例

    Python寻找路径和查找文件路径的示例

    今天小编就为大家分享一篇Python寻找路径和查找文件路径的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python代码使用 Pyftpdlib实现FTP服务器功能

    Python代码使用 Pyftpdlib实现FTP服务器功能

    FTP 服务器,在此之前我都是使用Linux的vsftpd软件包来搭建FTP服务器的,现在发现了利用pyftpdlib可以更加简单的方法即可实现FTP服务器的功能 ,需要的朋友可以参考下
    2019-07-07
  • python 爬虫爬取京东ps4售卖情况

    python 爬虫爬取京东ps4售卖情况

    这篇文章主要介绍了python 如何用爬虫爬取京东ps4售卖情况,帮助大家更好的利用python爬取自己想要的数据,感兴趣的朋友可以了解下
    2020-12-12
  • python 遍历pd.Series的index和value

    python 遍历pd.Series的index和value

    今天小编就为大家分享一篇python 遍历pd.Series的index和value,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python生成器表达式和列表解析

    python生成器表达式和列表解析

    最近在学习python的过程中,对列表解析及生成器表达式有点疑惑。从表面上看,两者很相似,只有一点不同:列表解析采用中括号[]来包含,生成器表达式采用小括号()来包含。本文我们就来详细看下python生成器表达式和列表解析
    2016-03-03

最新评论