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 requests库的使用

    以下是关于Python requests库的使用攻略: Python requests库的使用 requests是一个流行的HTTP库,用于向Web服务器发送HTTP请求和接收响应。以下是Python requests库的使用攻略: 安装requests库 在使用requests库之前,需要先安装它。可以使用以下命令在命令行中安装requests库: pip…

    python 2023年5月14日
    00
  • python3实现基于用户的协同过滤

    Python3实现基于用户的协同过滤 协同过滤是推荐系统中应用广泛的一种算法,其中基于用户的协同过滤是其中的一种常见方法。对于一个用户来说,根据他之前观看的电影或听过的歌曲,我们可以发现他喜欢哪些类型的电影或歌曲。对于相似的用户,我们可以基于他们相同或类似的偏好来推荐他们喜欢的电影或歌曲。下面是一个实现基于用户的协同过滤推荐系统的完整攻略。 数据集准备 在实…

    python 2023年5月14日
    00
  • Python chain()组合多个迭代器

    Python中的chain()函数可以将多个迭代器组合起来,形成一个更大的迭代器。在本文中,我们会详细讲解chain()函组合多个迭代器的使用方法,并提供两个示例来说明其具体用法。 语法 chain()函数的语法如下: itertools.chain(*iterables) 其中,*iterables是一个可变参数,代表着可以传入多个可迭代的对象,如序列、列…

    python-answer 2023年3月25日
    00
  • Python 匿名函数

    以下是Python匿名函数使用方法的完整攻略。 什么是Python匿名函数? Python中的匿名函数也称为lambda函数,是一种没有名称的函数,可以用于简化代码和代码块中的函数传递。 匿名函数使用关键字 lambda 定义,其形式为: lambda arguments: expression 其中,arguments 是函数的参数,用逗号分隔,expre…

    python-answer 2023年3月25日
    00
  • 详解Python搜索元组中的一个元素

    要在Python中搜索元组(tuple)中的一个元素,可以使用以下方法: 使用in关键字:可以使用in关键字判断元素是否存在于元组中,并返回一个布尔值。示例如下: # 创建一个元组 tup = (1, 2, 3, 4, 5) # 使用in判断元素是否存在于元组中 if 3 in tup: print("元素存在于元组中") else: p…

    python-answer 2023年3月25日
    00
  • 手把手教你Android全局触摸事件监听

    手把手教你Android全局触摸事件监听 在Android开发中,对于某些需要全局响应的触摸事件,我们需要对整个Activity设置触摸事件监听器。本文将手把手地教你如何在Android中实现全局触摸事件的监听。 实现原理 在Android中,我们可以通过在Activity中重写onTouchEvent()方法来监听触摸事件。onTouchEvent()方法…

    python 2023年6月13日
    00
  • Python计算程序运行时间的方法

    以下是详细讲解“Python计算程序运行时间的方法”的完整攻略。 为什么需要计算程序运行时间? 程序的运行时间是程序性能优化中非常重要的指标之一,也是评价一段程序优化效果的重要标准。在程序开发的过程中,我们需要不断地优化程序性能,确保程序能够快速、准确地执行结果。毫秒级的时间差距,也许就是决定程序能否畅快执行的关键。 因此,我们需要知道如何计算程序的运行时间…

    python 2023年6月3日
    00
  • Python迅速掌握语音识别之知识储备篇

    标题:Python迅速掌握语音识别之知识储备篇 简介 本文主要介绍Python语言在语音识别领域中所需要的基础知识储备,以帮助初学者能够快速掌握语音识别相关技术。 语音信号处理 首先,了解语音信号处理是语音识别的基础。对于一段语音信号,需要对其进行预处理,以便后续的特征提取和建模。主要包括信号的采样、去噪、增益归一化、时域和频域的特征提取等内容。 下面是使用…

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