python deque模块简单使用代码实例

当我们在Python中需要实现简单的队列或双向队列数据结构时,可以使用Python的deque模块。本文将详细讲解Python deque模块的简单使用代码实例,并提供两个示例来说明使用deque的好处。

什么是Python deque模块?

deque模块是Python标准库 collections 中的一个子模块,提供了一个双向队列的数据结构,支持高效的插入、删除、旋转等操作,并提供了线程安全的备选实现。

Python deque模块的简单使用代码实例

示例1:使用deque实现队列数据结构

考虑以下代码:

from collections import deque

queue = deque()

queue.append(1)
queue.append(2)
queue.append(3)

print(queue.popleft())
print(queue.popleft())
print(queue.popleft())

在以上代码示例中,我们使用deque创建了一个队列数据结构,并向队列中添加了3个元素。我们使用popleft()方法从队列的左端弹出元素。

输出:

1
2
3

可以看到,我们从队列中弹出的元素的顺序是我们添加的顺序。

示例2:使用deque实现滑动窗口

考虑以下代码:

from collections import deque

def max_in_window(arr, k):
    n = len(arr)
    if k > n or k <= 0:
        return []

    # 创建一个双向队列
    dq = deque()
    res = []

    for i in range(n):
        # 从队列右边移除超过k范围的元素
        # i - k为当前滑动窗口的左边界
        while dq and i - k == dq[0]:
            dq.popleft()
        # 从队列右边移除比当前元素小的元素
        while dq and arr[dq[-1]] < arr[i]:
            dq.pop()
        # 将当前元素的下标入队
        dq.append(i)
        # 如果当前i已经到达k-1,即当前窗口已经形成
        # 那么dq的左边界存储的就是窗口内最大值的下标
        if i >= k - 1:
            res.append(arr[dq[0]])

    return res


arr = [4, 3, 5, 4, 3, 3, 6, 7]
k = 3
print(max_in_window(arr, k))

在以上代码示例中,我们实现了一个函数max_in_window,这个函数接收两个参数arr和k,其中arr是一个数组,k是一个数字,表示窗口的大小。max_in_window函数返回一个数组,其中存储的是在arr中每个大小为k的窗口中的最大值。

我们使用deque模拟滑动窗口,dq中存储的是窗口中元素的下标,每次向右移动窗口时,首先从队列左端移除超出窗口范围的元素,然后从队列右端依次移除比当前元素小的元素,最后将当前元素的下标加入队列。此时队列的左端就存储着窗口中最大元素的下标,当i大于等于k-1时,即窗口满足大小要求时,dq的左端既是窗口内的最大值。

输出:

[5, 5, 5, 4, 6, 7]

可以看到,我们成功地实现了每个窗口中的最大值的搜索。

总结

本文介绍了Python deque模块的简单使用代码实例,包括如何使用deque实现队列数据结构,以及如何使用deque实现滑动窗口。这些代码示例有助于开发者更好地理解deque模块的使用,提升开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python deque模块简单使用代码实例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python 代码智能感知类型标注与特殊注释详解

    Python 代码智能感知类型标注与特殊注释详解 在Python 3.5及其以上版本,我们可以通过类型标注来实现代码智能感知。而且,在Python中还有很多特殊注释,它们可以用于帮助IDE(集成开发环境)进行更好的代码分析工作。 下面,我们将详细讲解Python代码智能感知类型标注与特殊注释的攻略。 Python 代码智能感知类型标注 类型标注可以写在Pyt…

    python 2023年6月3日
    00
  • python四种出行路线规划的实现

    讲解“Python四种出行路线规划的实现”的攻略如下: 一、背景介绍 随着移动互联网的发展,人们越来越频繁地出行,出行路线规划也成为人们生活中必不可少的服务之一。Python提供了多种出行路线规划的实现方案,本篇攻略将介绍其中的四种。 二、出行路线规划的四种实现方案 1. 高德地图API 高德地图API提供了多种路线规划的接口,包括步行、公交、驾车等,使用方…

    python 2023年6月3日
    00
  • Python异常信息的不同展现方法总结

    Python异常信息的不同展现方法总结 在Python编程中,异常信息是非常重要的,它可以帮助我们快速定位程序出现的错误。Python提供了种方式展现异常信息,本文将详细讲解Python异常信息不同展现方法总结,包括异常类型、异常信息、异常堆栈等在过程中,提供两个示例说明,助读更好地理解问题的解决方法。 异常类型 在Python中,异常类型是指异常的种类。以…

    python 2023年5月13日
    00
  • python实现dict版图遍历示例

    下面是详细的讲解“Python实现dict版图遍历示例”的攻略。 简介 在Python中,字典是一种非常常用的数据类型。我们可以通过字典实现图遍历的相关操作。在基于字典实现的图中,每个键代表一个节点,对应的值则是它相邻节点的列表。接下来我们将通过两个示例来演示如何基于字典实现图遍历。 示例一:广度优先遍历 问题描述 我们有一个图,如下所示: A: B, C …

    python 2023年6月6日
    00
  • Python中用字符串调用函数或方法示例代码

    下面为您提供Python中用字符串调用函数或方法的完整攻略。 背景 在Python中,我们可以通过函数名或方法名来调用相应的函数或方法。但是,有时候我们可能需要动态地根据某些条件来选择调用哪个函数或方法,这时就可以使用字符串来调用函数或方法。比如,我们可能从配置文件或用户输入中获取到一个字符串,该字符串代表着函数或方法名,然后我们需要根据该字符串来调用相应的…

    python 2023年6月5日
    00
  • Python使用matplotlib绘制三维图形示例

    下面我来详细讲解一下如何使用 Python 中的 matplotlib 库绘制三维图形。 环境搭建 首先,我们需要在本地计算机中安装 matplotlib,可以使用 pip 直接进行安装: pip install matplotlib 安装完成后,我们就可以开始进行三维图形的绘制了。 绘制三维散点图 现在,我们来看一下如何绘制一个三维散点图。代码如下: im…

    python 2023年5月31日
    00
  • Python中列表,元组,字典和集合的区别及它们之间的转换

    以下是“Python中列表、元组、字典和集合的区别及它们之间的转换”的完整攻略。 1. 列表、元组、字典和集合的概述 在Python中,列表、元组、字典和集合都是常见的数据结构。它们各自有不同的特点和用途。 列表:列表是一种有序的可变序列,可以存储任意类型的数据。 元组:元组是一种有序的不可变序列,可以存储任意类型的数据。 字典:字典是一种无序的键值对集合,…

    python 2023年5月13日
    00
  • Python 3.8.10 中的 ‘open(“file_path”)’ 和 ‘with open(“file_path”)’ 有什么区别,哪个最适合使用? [复制]

    【问题标题】:What is the difference between ‘open(“file_path”)’ and ‘with open(“file_path”)’ in Python 3.8.10 and which one is most suitable to use? [duplicate]Python 3.8.10 中的 ‘open(“fi…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部