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

yizhihongxing

当我们在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实现超时退出的三种方式总结”的完整攻略。 方式一:使用signal模块 signal模块可以在Python中捕获和处理信号。我们可以使用signal模块来设置一个定时器,当定时器超时时我们可以捕获SIGALRM信号并退出任务。下…

    python 2023年5月13日
    00
  • python-字典dict和集合set

    下面我来为大家详细讲解一下Python中的字典(dict)和集合(set)。 字典(dict) 字典是一个无序的、可变的数据结构,用于存储键值对(key-value)。字典中的键必须是唯一的(在同一个字典中),而值则不需要。 创建字典 创建一个字典需要使用花括号{},将键值对用冒号:隔开。例如: dict = {"name": &quot…

    python 2023年5月13日
    00
  • python list转置和前后反转的例子

    以下是详细讲解“Python列表转置和前后反转的例子”的完整攻略。 Python列表转置 在Python中,可以使用嵌套的列表来表示矩阵。如果要对矩阵进行转置,可以使用嵌套列表和for循环来实现。下面是一个示例,演示了如何使用列表转置: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] transpose = [[row[…

    python 2023年5月13日
    00
  • python怎么去除字符串最后的换行符‘\n’

    在Python中,可以使用字符串方法 rstrip() 来去除字符串末尾的换行符 \n。具体步骤如下: 定义包含换行符的字符串变量。 my_string = "Hello, World!\n" 上述字符串中包含一个换行符 \n。 使用 rstrip() 方法去除字符串末尾的换行符。 my_string = my_string.rstrip…

    python 2023年6月3日
    00
  • Python+OpenCV绘制多instance的Mask图像

    请看以下详细讲解。 概述 在图像处理中,我们有时候需要对图像的不同区域进行处理,这就需要我们进行实例分割——把同一张图中不同的物体分为多个实例,并对每个实例进行操作。OpenCV提供了一些实例分割方法,如GrabCut等。在某些场景下,我们还需要绘制每个实例的Mask图像,以便更直观地查看实例分割效果。本文将介绍如何使用Python+OpenCV绘制多ins…

    python 2023年5月19日
    00
  • 浅谈Python程序的错误:变量未定义

    当我们在Python编程过程中,运行程序时可能会出现“NameError: name ‘variable_name’ is not defined”这样的错误,这意味着我们正在尝试使用未定义的变量。以下是解决程序中变量未定义的完整攻略: 1. 检查变量名称 当我们在Python编程过程中遇到“NameError: ‘variable_name’ is not…

    python 2023年5月13日
    00
  • python中decimal模块的用法

    概述 Python中decimal模块提供了高精度的计算功能,可以避免浮点数在计算机内部存储精度有限导致的精度误差。使用decimal模块可以进行精确的浮点数计算,保留精度到小数点后指定的位数,并且可以自由地进行四则运算、小数点移位、比较等操作。 基本用法 首先,我们需要导入decimal模块: import decimal 接下来,我们需要创建一个Deci…

    python 2023年5月18日
    00
  • Python对字符串实现去重操作的方法示例

    下面是关于“Python对字符串实现去重操作的方法示例”的详细攻略。 1. 去重操作的目的和方法 去重操作的目的是为了消除字符串中的重复项,使字符串中的元素互不相同。Python提供了多种去重方法,这里介绍其中两种常用的方法。 1.1 使用set()函数进行去重 使用Python自带的set()函数可以很方便地对字符串进行去重操作。具体方法如下: str1 …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部