python双向队列deque的使用

 更新时间:2023年06月30日 10:12:16   作者:cv_lhp  
本文主要介绍了python双向队列deque的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

双向队列deque

双端队列,可以快速的从另外一侧追加和推出对象,deque是一个双向链表,针对list连续的数据结构插入和删除进行优化。

它提供了两端都可以操作的序列,这表示在序列的前后你都可以执行添加或删除操作。双向队列(deque)对象支持以下方法:

1. append()

添加元素x到队列右端

###定义deque(字符串形式)
d = deque('ghi')  
##或者列表形式定义deque:
# d = deque(['g', 'h', 'i'])
d.append('j') 
d
deque(['g', 'h', 'i', 'j'])

2. appendleft()

添加元素x到队列左端

d.appendleft('f')
d
deque(['f', 'g', 'h', 'i', 'j'])

3. clear()

移除所有元素,使其长度为0

d = deque('ghi')
d.clear()
d
deque([])

4. copy()

创建一份浅拷贝

d = deque('xiaoweuge')
y = d.copy()
print(y)
deque(['x', 'i', 'a', 'o', 'w', 'e', 'u', 'g', 'e'])

5. count()

计算 deque 中元素等于 x 的个数

d = deque('xiaoweuge-shuai')
d.count('a')
2

6. extend()

扩展deque的右侧,通过添加iterable参数中的元素

a = deque('abc')
b = deque('cd')
a.extend(b)
a
deque(['a', 'b', 'c', 'c', 'd'])
#与append 的区别
a = deque('abc')
b = deque('cd')
a.append(b)
deque(['a', 'b', 'c', deque(['c', 'd'])])

7. extendleft()

扩展deque的左侧,通过添加iterable参数中的元素。注意对左添加时,在结果中iterable参数中的顺序将被反过来添加

a = deque('abc')
b = deque('cd')
a.extendleft(b)
a
deque(['d', 'c', 'a', 'b', 'c'])

8. index()

返回元素 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一个匹配项,如果未找到则引发 ValueError

d = deque('xiaoweuge')
d.index('w')
4

9. insert()

在位置 i 插入 x ,如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError

a = deque('abc')
a.insert(1,'X')
deque(['a', 'X', 'b', 'c'])

10. pop()

移去并且返回deque 最右侧的那一个元素。 如果没有元素的话,就引发一个 IndexError

d = deque('abcj')
d.pop()      
'j'

11. popleft()

移去并且返回一个元素,deque 最左侧的那一个元素。 如果没有元素的话,就引发 IndexError

d = deque('abcj')
d.popleft()
'a'

12. remove(value)

移除找到的第一个 value。 如果没有的话就引发 ValueError

a = deque('abca')
a.remove('a')
a
deque(['b', 'c', 'a'])

13. reverse()

将deque逆序排列,返回 None

#逆序排列
d = deque('ghi') # 创建一个deque
list(reversed(d))
['i', 'h', 'g']
deque(reversed(d))
deque(['i', 'h', 'g'])

14. rotate(n=1)

向右循环移动 n 步。 如果 n 是负数,就向左循环。如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft())

# 向右边挤一挤
d = deque('ghijkl')
d.rotate(1)                      
d
deque(['l', 'g', 'h', 'i', 'j', 'k'])
# 向左边挤一挤
d.rotate(-1)                     
d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
#看一个更明显的
x = deque('12345')
x
deque(['1', '2', '3', '4', '5'])
x.rotate()
x
deque(['5', '1', '2', '3', '4'])
d = deque(['12','av','cd'])
d.rotate(1)
deque(['cd', '12', 'av']

15. maxlen

Deque的最大尺寸,如果没有限定的话就是 None

from collections import deque
d=deque(maxlen=10)
for i in range(20):
   d.append(i)
d  
deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

16. 其他操作

除了以上操作,deque还支持迭代、封存、len(d)、reversed(d)、copy.deepcopy(d)、copy.copy(d)、成员检测运算符 in 以及下标引用例如通过 d[0] 访问首个元素等。 索引访问在两端的复杂度均为 O(1) 但在中间则会低至 O(n)。 如需快速随机访问,请改用列表。

Deque从版本3.5开始支持 __ add (), mul __(),和 __ imul __() 操作。

from collections import deque
d = deque('ghi')                 # 创建一个deque
for elem in d:
    print(elem.upper())
G
H
I
#从右边添加一个元素
d.append('j')
d   
deque(['g', 'h', 'i', 'j'])
#从左边添加一个元素
d.appendleft('f')
d 
deque(['f', 'g', 'h', 'i', 'j'])
#右边删除
d.pop()                          
'j'
#左边边删除
d.popleft()
'f'
#看看还剩下啥
list(d)                          # 
['g', 'h', 'i']
#成员检测
'h' in d                         
True
#添加多个元素
d.extend('jkl')              
d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
d.clear()                        # empty the deque
d.pop()                          # cannot pop from an empty deque
Traceback (most recent call last):
    File "<pyshell#6>", line 1, in -toplevel-
        d.pop()
IndexError: pop from an empty deque
d.extendleft('abc')              # extendleft() reverses the input order
d
deque(['c', 'b', 'a']

参考链接

【万字长文详解】Python库collections,让你击败99%的Pythoner

到此这篇关于python双向队列deque的使用的文章就介绍到这了,更多相关python双向队列deque内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中ini配置文件的写入与读取的操作示例

    Python中ini配置文件的写入与读取的操作示例

    本文详细介绍了如何在Python中使用configparser模块进行INI文件的读写操作,包括基本用法、高级用法以及创建、读取和管理配置文件的实例演示,需要的朋友可以参考下
    2025-03-03
  • python数据分析基础之pandas中loc()与iloc()的介绍与区别介绍

    python数据分析基础之pandas中loc()与iloc()的介绍与区别介绍

    我们经常在寻找数据的某行或者某列的时常用到Pandas中的两种方法iloc和loc,两种方法都接收两个参数,第一个参数是行的范围,第二个参数是列的范围,这篇文章主要介绍了python数据分析基础之pandas中loc()与iloc()的介绍与区别,需要的朋友可以参考下
    2024-07-07
  • Python pandas入门系列之众数和分位数

    Python pandas入门系列之众数和分位数

    分位数(Quantile),也称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,分析其数据变量的趋势,而众数(Mode)是代表数据的一般水平,这篇文章主要给大家介绍了Python pandas系列之众数和分位数的相关资料,需要的朋友可以参考下
    2021-08-08
  • python查看矩阵的行列号以及维数方式

    python查看矩阵的行列号以及维数方式

    这篇文章主要介绍了python查看矩阵的行列号以及维数方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python实现四个经典小游戏合集

    Python实现四个经典小游戏合集

    这篇文章主要介绍了利用Python编写一个经典小游戏的合集,包括:贪吃蛇,扫雷,俄罗斯方块,五子棋。感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12
  • 简单介绍Python中的readline()方法的使用

    简单介绍Python中的readline()方法的使用

    这篇文章主要介绍了简单介绍Python中的readline()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python PyCharm无法打开终端命令行最终解决方案(实测成功)

    Python PyCharm无法打开终端命令行最终解决方案(实测成功)

    这篇文章主要介绍了在使用PyCharm 2024版本时遇到的无法打开终端的问题,文中提供了两种解决方案,大家可以根据自己的需求选择对应的解决方法,需要的朋友可以参考下
    2024-12-12
  • 使用Python制作一盏 3D 花灯喜迎元宵佳节

    使用Python制作一盏 3D 花灯喜迎元宵佳节

    这篇文章主要介绍了用Python制作一盏 3D 花灯喜迎元宵佳节,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 使用Python在PowerPoint演示文稿之间复制样式

    使用Python在PowerPoint演示文稿之间复制样式

    在专业演示文稿设计与制作领域,多场演示间保持一致性至关重要,在PowerPoint演示文稿之间复制幻灯片母版成为了一项关键技巧,本文中,我们将探讨如何使用Python在不同的PowerPoint演示文稿之间复制幻灯片母版,提升演示文稿创作流程的效率与美观度,需要的朋友可以参考下
    2024-05-05
  • python创建Flask Talisman应用程序的步骤详解

    python创建Flask Talisman应用程序的步骤详解

    Flask是一个功能强大的Web框架,主要用于使用Python语言开发有趣的Web应用程序,Talisman基本上是一个Flask扩展,用于添加HTTP安全标头我们的Flask应用程序易于实施,本文就给大家讲讲带Talisman的Flask安全性,需要的朋友可以参考下
    2023-09-09

最新评论