Python:【基础语法】 deque()用法

这篇具有很好参考价值的文章主要介绍了Python:【基础语法】 deque()用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Python的deque()——双向队列

Python中的标准库collections中有一个deque,该对象与list列表相似。这里的“双向”指的是deuqe的结构使用双向链表,它提供了两端都可以操作的序列,这意味着,我们可以在序列前后都执行添加或删除。大多操作与List相同,如访问元素,求序列长度等,同样deque序列中的元素类型也不唯一。

二、基本操作

1.构建deque序列

collections.deque(seq, maxlen)

  • seq -- 可迭代对象,如列表、字符串、 range() 函数等。
  • maxlen -- deque的限制长度
    两个参数都为可选参数。通常不设定maxlen,但注意当限制长度的deque增加超过限制数的元素时, 另一边的元素会自动删除,详见下文增加元素的操作。
    返回一个deque序列。
>>>q1=collections.deque()
>>>q2=collections.deque([1,2,3,4,5])
>>>q3=collections.deque("12345")
>>>q4=collections.deque(range(1,6))
>>>q1
>>>q2
>>>q3
>>>q4

结果为:

deque([])
deque([1, 2, 3, 4, 5])
deque(['1', '2', '3', '4', '5'])
deque([1, 2, 3, 4, 5])

 

2.增添元素

(1) 队头添加元素

appendleft()

>>>q=collections.deque([1,2,3,4,5])
>>>q.appendletf(0)
>>>q

deque([0, 1, 2, 3, 4, 5])

(2) 队尾添加元素

append()

>>>q=collections.deque([1,2,3,4,5])
>>>q.append(0)
>>>q

deque([1, 2, 3, 4, 5, 0])

(3) 限制长度的deque增加元素

>>>q=collections.deque([1,2,3,4,5], maxlen=5)
>>>q.append(0)
>>>q

结果为:

#超过限制长度,队尾增加,队头自动删除
deque([2, 3, 4, 5, 0], maxlen=5)

(4) 指定位置插入元素

insert(loc, elem)

  • loc -- 插入元素的位置
  • elem -- 插入的元素,可为任意类型的元素
>>>q=collections.deque([1,2,3,4,5])
>>>q.insert(2,7)
>>>q

deque([1, 2, 7, 3, 4, 5])

 

3.删除元素

(1) 队头弹出元素

popleft()
返回弹出的元素

>>>q=collections.deque([1,2,3,4,5])
>>>q.popleft()
>>>q

deque([2, 3, 4, 5])

(2) 队尾弹出元素

pop()
返回弹出的元素

>>>q=collections.deque([1,2,3,4,5])
>>>q.pop()
>>>q

deque([1, 2, 3, 4])

(3) 删除指定元素

remove()

>>>q=collections.deque([1,2,3,4,5])
>>>q.remove(2)
>>>q

deque([1, 3, 4, 5])

 

4.添加序列

(1) 队头添加序列

extendleft(seq)

  • seq -- 可迭代对象
>>>q1=collections.deque([1,2,3,4,5])
>>>q2=collections.deque([1,2,3,4,5])
>>>q1.extendleft([6,7,8])
>>>q2.extendleft(range(6,10))
>>>q1
>>>q2

结果为:

deque([6, 7, 8, 1, 2, 3, 4, 5])
deque([9, 8, 7, 6, 1, 2, 3, 4, 5])

(2) 队尾添加序列

extend(seq)

  • seq -- 可迭代对象
>>>q1=collections.deque([1,2,3,4,5])
>>>q2=collections.deque([1,2,3,4,5])
>>>q1.extend([6,7,8])
>>>q2.extend(range(6,10))
>>>q1
>>>q2

结果为:

deque([1, 2, 3, 4, 5, 6, 7, 8,])
deque([1, 2, 3, 4, 5, 6, 7, 8, 9])

【deque是线程安全的,也就是说可以同时从deque集合的左边和右边进行操作而不会有影响】

>>>q=collections.deque([1,2,3,4,5])
>>>q.append(q.popleft())
>>>q

deque([2, 3, 4, 5, 1])

 

5.其他操作

(1) 旋转

rotate(num)

  • num -- 从序列的第num个位置整体旋转
    若num>=1,表示从右向左的num个数,与其左边的所有数顺时针旋转
    若num<=-1,表示从左向右的-num个数,与其右边的所有数逆时针旋转
>>>q=collections.deque([1,2,3,4,5])
>>>q.rotate(3)
>>>q

deque([3, 4, 5, 1, 2])

num=3,[3,4,5]和[1,2]进行顺时针旋转

>>>q=collections.deque([1,2,3,4,5])
>>>q.rotate(-3)
>>>q

deque([4, 5, 1, 2, 3])

num=-3,[1,2,3]和[4,5]进行逆时针旋转
 
注意
① |num|可以大于序列的长度,可以把队列看作是首位相连即可,如实例中num=6,等价于num%5=1,即num=1的效果,负数同理。
② num=0以及序列长度的倍数翻转没有效果,即序列不变。
③ 旋转的结果也可以通过同时popleft()和append()、pop()和appendleft()两种方式得到相同结果。但时间复杂度回变高,因此旋转更好一些。
关于旋转的应用可看例题:找出游戏的获胜者
 

(2) 其他

in操作符、index()查找索引位置、copy()复制一个新队列、count()统计队列中元素个数等均可使用。

三、deuqe与list的区别

相比于list实现的队列,deque实现拥有更低的时间和空间复杂度。list实现出队(pop)和插入(insert)时的空间复杂度大约为O(n),deque在出队(pop)和入队(append)时的时间复杂度是O(1)。

使用q=deque()代替q=list(),因为q.popleft()效率比q.pop(0)
这是因为:列表实现是基于数组的。pop(0)从列表中删除第一个项,它需要左移len(lst) - 1个项来填补空白。 deque()实现使用双向链表。因此无论deque有多大,deque.popleft()都需要一个常量的操作数。
deque.popleft():T(n)=O(1),而list.pop(0):T(n)=O(n)文章来源地址https://www.toymoban.com/news/detail-411987.html

到了这里,关于Python:【基础语法】 deque()用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ STL之 queue和deque用法详解

    1.1 创建queue对象: queue数据类型,容器类型 q; 数据类型:可以是int、double等基本类型,也可以是自定义的结构体。 容器类型:一般为deque或者list(双向链表),可省略,省略时以deque为默认容器。 声明代码如下: 只能队尾插入,队首弹出。无法index遍历,也不可以迭代器遍

    2023年04月10日
    浏览(28)
  • C++中deque的用法(超详细,入门必看)

    博主简介: Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页: @陈童学哦 所属专栏: C++STL 如果本文对你有所帮助的话,希望可以点赞👍收藏📂支持一下哦! 期待你的关注,一起成长哟! 前言: Hello各位小伙伴们好!欢迎来到 本专栏C++STL 的学习,

    2024年02月07日
    浏览(27)
  • stack 、 queue的语法使用及底层实现以及deque的介绍【C++】

    stack是一种容器适配器,具有后进先出,只能从容器的一端进行元素的插入与提取操作 队列是一种容器适配器,具有先进先出,只能从容器的一端插入元素,另一端提取元素 stack和queue在STL中并没有将其划分在容器的行列,而是称为容器适配器 因为stack和queue对其他容器的接口

    2024年02月12日
    浏览(33)
  • C++ STL第三篇(搞清楚deque原理和有多少用法)

    Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。 Deque容器和vector容器最大的差异,

    2024年03月17日
    浏览(26)
  • python基础实战4-python基础语法

    注释用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。 Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。 注释就是对代码的解释说明,可以让其他人更加轻松地了解代码 注释就是编写程序时,写程序的人给一个语句

    2024年02月01日
    浏览(30)
  • 【Python 零基础入门】基础语法

    当我们学习一门新语言, 首先要熟悉它的语法规则. 这就如同学习一门外语, 我们需要知道句子的结构, 词汇的使用和语法的规则. 与 Java 中的 “{}” 不同, Python 使用缩进. 缩进在 Python 中非常重要, 定义了代码的结构和层次. 通常用 4 个空格作为标准的缩进 (TAP 键). 在我们编写代

    2024年02月04日
    浏览(33)
  • 【Python】Python基础语法 (建议有C基础)

    本文的Python解释器版本: Python 3.10.6 (64-bit) 本文的Python开发工具: PyCharm 本文使用的PyCharm快捷键: 运行  Ctrl+Shift+F10 字面量:在代码中, 被写下来的的固定的 值 ,称之为字面量 下面我们来看一看Python中有那些值呢? 对于我们初学者,我们现在只学习 数字与字符串 ,后面

    2024年02月06日
    浏览(28)
  • 【Python入门】Python基础语法

    前言 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函数、函数进阶、数据容器、文件操作、异常模块与包、数据可视化等,

    2024年02月03日
    浏览(34)
  • Python零基础入门(一)——Python简介与基础语法

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 Python是一门适合初学者入门的编程语言,本文将介

    2024年02月10日
    浏览(27)
  • Python第二课 : Python语法基础

    一:标识符 1.第一个字母必须是字母表中字母或下划线_,python可以使用中文汉字。 2.标识符的其他的部分由字母、数字和下划线或中文汉字组成。 3.标识符对大小写敏感。 我们先来介绍标识符,标识符,其实就是我们的一些。什么是呢?比如说print()打印输出,

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包