Python双端队列deque的实现

yizhihongxing

Python双端队列deque的实现

双端队列deque即"double-ended queue",是一种具有队列和栈的性质的数据结构。deque可以从队列的两端插入和删除元素。Python官方提供了collections模块中的deque数据类型,可以实现双端队列的操作。本文将详细讲解如何使用Python中的deque来实现双端队列的操作。

创建deque

首先,需要导入collections模块,然后创建一个空的deque对象。

import collections

deque_example = collections.deque()

添加元素

从右边添加

可以使用deque对象的append()方法,将元素添加到双端队列的右边。

import collections

deque_example = collections.deque()

deque_example.append(10)
deque_example.append(20)

print(deque_example)
# 输出: deque([10, 20])

从左边添加

使用deque对象的appendleft()方法,将元素添加到双端队列的左边。

import collections

deque_example = collections.deque()

deque_example.appendleft(10)
deque_example.appendleft(20)

print(deque_example)
# 输出: deque([20, 10])

删除元素

从右边删除

可以使用deque对象的pop()方法,将双端队列的右侧元素删除并返回。

import collections

deque_example = collections.deque([10, 20, 30])

deque_example.pop()

print(deque_example)
# 输出: deque([10, 20])

从左边删除

使用deque对象的popleft()方法,将双端队列的左侧元素删除并返回。

import collections

deque_example = collections.deque([10, 20, 30])

deque_example.popleft()

print(deque_example)
# 输出: deque([20, 30])

查看队列元素

可以直接打印deque对象,也可以使用迭代器(iterator)的方式来访问双端队列中的元素。

import collections

deque_example = collections.deque([10, 20, 30])

# 直接打印双端队列对象
print(deque_example)
# 输出: deque([10, 20, 30])

# 使用迭代器来访问双端队列中的元素
for i in deque_example:
    print(i)
# 输出:
# 10
# 20
# 30

示例1

下面是一个简单的双端队列实现的示例,能够将整数列表按顺序压入双端队列并从中间弹出。

import collections

deq = collections.deque()
data = [10, 20, 30, 40, 50]

for i in data:
    deq.append(i)

while len(deq) != 0:
    print(deq.popleft())
    if len(deq) != 0:
        print(deq.pop())

输出:

10
50
20
40
30

说明:

在上例中,我们首先创建了一个空的双端队列deq,并且创建了一个整形列表data。接下来我们将data中的所有元素按顺序压入双端队列deq中。

接下来,我们使用while循环来将队列中的元素依次取出,并交替从左边和右边弹出,直到双端队列deq为空。

示例2

下面是一个基于双端队列实现的循环队列Deque队列示例,能够支持添加数据、弹出数据、队列旋转等操作。

import collections

maximum_size = 5
deque_example = collections.deque(maxlen=maximum_size)

for _ in range(maximum_size):
    deque_example.append(101)

print(deque_example)

deque_example.appendleft(102)
print(deque_example)

deque_example.rotate(2)
print(deque_example)

deque_example.rotate(-1)
print(deque_example)

输出:

deque([101, 101, 101, 101, 101], maxlen=5)
deque([102, 101, 101, 101, 101], maxlen=5)
deque([101, 101, 102, 101, 101], maxlen=5)
deque([101, 102, 101, 101, 101], maxlen=5)

说明:

在上例中,我们创建了一个最大长度为5的双端队列deque_example。通过使用for循环将5个元素插入到队列中。接下来,我们使用appendleft(102)函数在左边插入整数102。然后,我们使用rotate(2)函数将队列向右旋转两个元素。最后,我们使用rotate(-1)函数将队列向左旋转一个元素。

通过此例,我们可以看到deque队列的跨结构灵活性,即可以作为队列而使用,也可以作为栈而使用。在此基础上旋转移位等操作也能方便地进行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python双端队列deque的实现 - Python技术站

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

相关文章

  • python:print格式化输出到文件的实例

    当我们想要将Python的print语句输出到文件中时,可以使用Python内置的open函数和文件对象来实现。以下是一些可用的方法: 使用文件对象的write方法 首先,我们需要使用open函数来打开文件,并且使用“w”模式来以写入模式打开文件,允许我们写入内容到文件中。一旦文件打开,我们可以使用文件对象的write方法将print语句输出到文件中。 下面…

    python 2023年6月5日
    00
  • Python 编程操作连载之字符串,列表,字典和集合处理

    Python 编程操作连载之字符串、列表、字典和集合处理 Python 是一门功能强大的编程语言,对于字符串、列表、字典和集合等常见数据结构的处理具有很好的支持。在本文中,我们将介绍如何使用 Python 编程语言对字符串、列表、字典和集合进行处理,包括相关的操作和示例。 字符串 字符串是 Python 中最常见的数据类型之一,可以使用单引号或双引号来表示。…

    python 2023年5月13日
    00
  • python网络爬虫实战

    Python网络爬虫实战攻略 Python网络爬虫可以帮助我们自动化地从互联网上获取需要的信息,有非常广泛的应用。本攻略基于Python语言,介绍了如何使用Python进行网络爬虫开发,包括爬虫基础知识、网络协议、URL解析、网页解析和数据持久化等内容。 爬虫基础知识 在进行网络爬虫开发前,我们需要掌握一些爬虫基础知识,包括: 网络协议:HTTP、HTTPS…

    python 2023年5月14日
    00
  • python画图–输出指定像素点的颜色值方法

    下面是关于“Python画图–输出指定像素点的颜色值方法”的完整攻略。 1. 为什么需要输出指定像素点的颜色值? 在Python的图像处理中,有时需要获取图像中某个特定像素点的RGB颜色值,比如当我们需要针对某些像素点做特殊的处理,或者需要获取一些特定颜色范围内的像素点来进行图像分析等等。 2. Python输出指定像素点颜色值的方法 那么如何输出指定像素…

    python 2023年5月18日
    00
  • Python 压缩函数(zip)详解

    Python中的zip()函数是一个内置函数,用于将多个序列中的元素打包在一起,返回一个元组构成的列表,其中每个元组包含来自每个序列的元素。它可以接受任意数量的序列,其中最短的序列确定了新列表的长度。在这篇文章中,我们将详细介绍zip函数的用法、语法和示例。 语法 zip()函数的语法如下:zip([iterable, …]) 这里iterable表示要…

    2023年2月19日
    00
  • Python路径作为字符串[关闭]

    【问题标题】:Python path as a string [closed]Python路径作为字符串[关闭] 【发布时间】:2023-04-04 10:49:02 【问题描述】: 我使用this 模块 我有一个需要字符串的函数。我没有找到任何可以将总路径作为字符串提供给我的函数。 from path import * import paramiko if…

    Python开发 2023年4月6日
    00
  • 关于sys.stdout和print的区别详解

    关于sys.stdout和print的区别详解 在Python中,有多种方式可以将文本输出到控制台或文件,其中包括使用sys.stdout和print语句。虽然它们都可以用于输出文本,但它们之间存在一些重要的区别,下面我们将为您详细介绍这些区别。 sys.stdout的工作原理 sys.stdout是Python标准库中的一个对象,它代表着当前程序中需要标准…

    python 2023年6月3日
    00
  • python 实现二维数组的索引、删除、拼接操作

    在Python中,二维数组可以使用列表嵌套列表的方式来实现。本文将详细讲解如何使用Python实现二维数组的索引、删除、拼接操作。 二维数组的创建 在Python中,可以使用列表嵌套列表的方式来创建二维数组。例如: # 创建一个3行4列的二维数组 arr = [[0 for j in range(4)] for i in range(3)] print(ar…

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