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双向队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django基础之数据库操作方法(详解)

    django基础之数据库操作方法(详解)

    下面小编就为大家带来一篇django基础之数据库操作方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • python全栈开发语法总结

    python全栈开发语法总结

    在本篇文章里小编给大家整理的是一篇关于python全栈开发语法的相关总结内容,有兴趣的朋友们可以跟着学习参考下。
    2020-11-11
  • Python获取单个程序CPU使用情况趋势图

    Python获取单个程序CPU使用情况趋势图

    这篇文章主要介绍了Python获取单个程序CPU使用情况趋势图,本文使用matplotlib将数据可视化,需要的朋友可以参考下
    2015-03-03
  • Django之choices选项和富文本编辑器的使用详解

    Django之choices选项和富文本编辑器的使用详解

    这篇文章主要介绍了Django之choices选项和富文本编辑器的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python Numpy库datetime类型的处理详解

    Python Numpy库datetime类型的处理详解

    这篇文章主要介绍了Python Numpy库datetime类型的处理详解,Python中自带的处理时间的模块就有time 、datetime、calendar,另外还有扩展的第三方库,如dateutil等等。。当我们用NumPy库做数据分析时,如何转换时间呢?需要的朋友可以参考下
    2019-07-07
  • Python大数据之使用lxml库解析html网页文件示例

    Python大数据之使用lxml库解析html网页文件示例

    这篇文章主要介绍了Python大数据之使用lxml库解析html网页文件,结合实例形式分析了Python大数据操作中使用lxml库解析html网页具体步骤及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • python基础之集合

    python基础之集合

    这篇文章主要介绍了python集合,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下
    2021-10-10
  • python中字符串String及其常见操作指南(方法、函数)

    python中字符串String及其常见操作指南(方法、函数)

    String方法是用来处理代码中的字符串的,它几乎能搞定你所遇到的所有字符串格式,下面这篇文章主要给大家介绍了关于python中字符串String及其常见操作(方法、函数)的相关资料,需要的朋友可以参考下
    2022-04-04
  • Python中将字符串转换为变量名的示例详解

    Python中将字符串转换为变量名的示例详解

    在某些情况下,您可能希望将字符串动态转换为变量名,在本文中,我们将通过四个简单的示例来探索如何在Python中将字符串转换为变量名,需要的朋友可以参考下
    2024-10-10
  • Python设计模式之适配器模式原理与用法详解

    Python设计模式之适配器模式原理与用法详解

    这篇文章主要介绍了Python设计模式之适配器模式原理与用法,结合实例形式分析了适配器模式的相关概念、原理及Python实现技巧,需要的朋友可以参考下
    2019-01-01

最新评论