python基础(deque双端队列)

本文介绍了Python中collections模块的deque双端队列,包括如何创建、添加和删除元素,以及各种方法如append、appendleft、pop、popleft等的使用。此外,还提到了deque的反转、统计元素个数、限制队列长度等功能,强调了其在按顺序删除元素时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双端队列
在需要按添加元素的顺序进行删除时,双端队列很有用。在模块collections中,包含类型deque以及其他几个集合(collection)类型。
与集合(set)一样,双端队列也是从可迭代对象创建的,它包含多个很有用的方法。

 

  1. A=deque([]) #创建一个空的双队列
  2. A.append(n) #从右边像队列中增加元素 ,n表示增加的元素
  3. A.appendleft(n) #从左边像队列中增加元素,n表示增加的元素
  4. A.clear() #清空队列
  5. A.count(n) #在队列中统计元素的个数,n表示统计的元素
  6. A.extend(n) #从右边扩展队列,n表示扩展的队列
  7. A.extendleft(n) #从左边扩展队列,n表示扩展的队列
  8. A.pop() #从队列的右边删除元素,并且返回删除值
  9. A.popleft() #从队列的左边删除元素,并且返回删除值
  10. A.remove(n) #从队列中删除指定的值‘
  11. A.reverse() #翻转队列
  12. A.rotate(n) #旋转队列,默认时值为1,由右边开始旋转,负值代表左边旋转,n代表从队列的第一个元素开始,n从1开始计数

例:
>>> from collections import deque 
>>> q = deque(range(5))    #设置deque队列容器只能容纳5个元素
>>> q.append(5) 
>>> q.appendleft(6) 
>>> q 
deque([6, 0, 1, 2, 3, 4, 5]) 
>>> q.pop() 

>>> q.popleft() 

>>> q.rotate(3)    #设置最后3个元素2、3、4向左移,环绕到开始一端,如果参数为负数,则向右移放到最后。
>>> q 
deque([2, 3, 4, 0, 1]) 
>>> q.rotate(-1) 
>>> q 
deque([3, 4, 0, 1, 2])
双端队列很有用,因为它支持在队首(左端)高效地附加和弹出元素,而使用列表无法这样做。另外,还可高效地旋转元素(将元素向右或向左移,并在到达一端时环绕到另一端)。双端队列对象还包含方法extend和extendleft,其中extend类似于相应的列表方法,而extendleft类似于appendleft。请注意,用于extendleft的可迭代对象中的元素将按相反的顺序出现在双端队列中。

>>> d = collections.deque()

>>> d.extendleft(range(6))

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

 

统计队列中元素个数

使用count()方法统计队列中某个元素的个数。

from collections import deque

d = deque("abac")
d.count('a')    #输出2

 

反转队列

使用reverse方法反转队列:

from collections import deque

d = deque(range(10))
d.reverse()

 

maxlen(队列最大长度)

deque还可以设置队列的长度,使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。

如果你不设置最大队列大小,那么就会得到一个无限大小队列。

from collections import deque

d1 = deque(maxlen=5)
d2 = deque(range(10),4)

Deque的缺点就是remove还有判断获取索引的时候,速度有些慢, 因为他需要执行多遍deque相关联的数据块 。不像list那样,搞一遍就行。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值