Python collections中的双向队列deque简单介绍详解

Python collections中的双向队列deque简单介绍详解

前言

在Python的collections模块中,deque是一个强大的数据结构,它可以帮助我们实现高效的队列和栈操作。deque是一个双向队列,因此支持从两端进行操作,其实现方式使得它比使用列表实现队列的方式更加高效。

使用方法

创建deque

在使用deque之前,首先需要导入collections模块:

from collections import deque

创建deque的方式有多种,可以使用空的deque:

d = deque()

也可以使用一个可迭代对象(例如列表)来创建deque:

d = deque([1, 2, 3])

添加元素

双向队列支持从头和尾部添加元素,分别使用appendleft和append方法。例如:

d.append(4)      # 从右端添加元素,d现在为deque([1, 2, 3, 4])
d.appendleft(0)  # 从左端添加元素,d现在为deque([0, 1, 2, 3, 4])

删除元素

双向队列同样支持从头和尾部删除元素,分别使用popleft和pop方法。例如:

d.pop()         # 从右端删除元素,d现在为deque([0, 1, 2, 3])
d.popleft()     # 从左端删除元素,d现在为deque([1, 2, 3])

获取元素

deque同样支持从头和尾部获取元素,分别使用index和reverse_index方法。例如:

d.index(1)           # 返回1的位置,即0
d.reverse_index(2)   # 返回2的位置,即1(因为deque是双向的)

其他操作

除了前面提到的操作之外,deque还支持以下几种操作:

  • rotate(n):将deque向右循环移动n步(如果n为负数则向左移动)。
  • clear():清空deque。
  • extend(iter):将可迭代对象中的元素加入deque,与列表的extend方法类似。
  • extendleft(iter):将可迭代对象中的元素从左端加入deque。

示例说明

基本队列

双向队列的最基本用法就是作为一个队列来使用,可以使用append和popleft方法实现队列的操作。例如:

q = deque()
q.append(1)
q.append(2)
print(q.popleft())  # output: 1
print(q.popleft())  # output: 2

实现一个滑动窗口

有时候我们需要维护一个滑动窗口,并在窗口中查找某个元素是否存在。使用deque可以非常方便地实现这个功能,例如:

def find_element_in_window(nums, window_size, target):
    window = deque(nums[:window_size], maxlen=window_size)
    for i in range(window_size, len(nums)):
        if target in window:
            return True
        window.append(nums[i])
    return target in window

nums = [1, 3, -1, -3, 5, 3, 6, 7]
print(find_element_in_window(nums, 3, 0))  # output: True
print(find_element_in_window(nums, 3, 5))  # output: True
print(find_element_in_window(nums, 3, 2))  # output: False

在上面的示例中,我们使用deque维护了一个长度为3的窗口,逐步向右移动并向窗口中添加元素。如果目标元素在窗口中,则返回True,否则在循环结束后再检查一次。注意,在创建deque时我们设置了maxlen参数,这意味着当deque长度超过maxlen时,最左边(最老的)的元素自动被删除,因此每次添加新元素时deque的长度始终为3。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python collections中的双向队列deque简单介绍详解 - Python技术站

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

相关文章

  • 简介二分查找算法与相关的Python实现示例

    下面是详细讲解“简介二分查找算法与相关的Python实现示例”的完整攻略。 二分查找算法 二分查找算法(Binary Search Algorithm)是一种常用的查找算法,用于在有序数组中查找指定元素。该算法的核心思想是将数组分成两份,判断目标元素在哪一部分中然后继续在该部分中查找,直到找到目标元素或者确定标元素不存在。 二分查找算法的时间复杂度为O(lo…

    python 2023年5月14日
    00
  • Python入门教程(二十一)Python的数组

    Python入门教程(二十一)Python的数组 什么是数组 在计算机科学中,数组是一种用于存储大量数据的数据结构,它由相同类型的元素组成,并按顺序排列。每个数组元素都可以通过数组中的唯一索引访问,这个索引可以是数字或字符。Python中的数组也被称为列表。Python数组使用方括号[]来包含元素,使用逗号分隔元素。 创建Python数组 Python数组可…

    python 2023年6月5日
    00
  • Django media static外部访问Django中的图片设置教程

    下面是“Django media static外部访问Django中的图片设置教程”的完整攻略,共包含两条示例说明。 1. 创建media以及static文件夹 在Django项目的根目录下,创建一个名为media和static的文件夹。其中,media文件夹用于存放用户上传的媒体文件,例如用户上传的图片、音频、视频等;而static文件夹用于存放静态文件,…

    python 2023年5月18日
    00
  • Python利用Beautiful Soup模块搜索内容详解

    BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树,并提供了一些有用的方法来搜索和操作文档树。以下是Python利用BeautifulSoup模块搜索内容的详细攻略: 安装BeautifulSoup 在使用BeautifulSoup之前,需要先安装BeautifulSoup。可以使用pip…

    python 2023年5月14日
    00
  • Python使用matplotlib绘制余弦的散点图示例

    下面我来详细讲解使用Python的Matplotlib库绘制余弦函数散点图的完整攻略。需要注意的是,Matplotlib是Python中最为常用的数据可视化库之一,用于绘制各种类型的图表、图形,包括折线图、散点图、直方图、饼图等。 第一步:导入库文件 第一步骤就是引入所需要的库文件,这里我们需要引入matplotlib库,并使用以下命令进行导入: impor…

    python 2023年6月5日
    00
  • Python内置加密模块用法解析

    Python内置加密模块用法解析 Python基于其擅长的优雅和简单的语言设计,成为了数据科学、人工智能、机器学习等领域的重要底层编程语言。在这些领域中,可能存在需要对敏感数据进行安全加密的需求。Python内置了标准的加密模块,提供了从常用的加密算法和哈希函数到公钥基础设施工具的功能,满足了开发者的加密需求。 加密模块简介 Python内置加密模块为用户提…

    python 2023年6月2日
    00
  • python中使用%与.format格式化文本方法解析

    Python中使用%与.format格式化文本方法解析 在Python中,我们可以使用%和.format()两种方法来格式化文本。这两种方法都可以用于将变量的值插入到字符串中,以便生成新的字符串。下面我们将详细介绍这两种方法的使用方法。 使用%格式化文本 %是Python中的一种字符串格式化操作符,它可以将变量的值插入到字符串中。%的语法如下: string…

    python 2023年5月15日
    00
  • 详解Python中使用base64模块来处理base64编码的方法

    使用base64模块可以在Python程序中进行base64编码和解码操作。以下为详细的步骤介绍: 1. 导入base64模块 在Python程序中使用base64模块需要先导入模块。 import base64 2. 对字符串进行base64编码 使用base64模块的b64encode方法可以对数据进行base64编码。该方法的语法如下: base64.…

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