python 中collections的 deque使用详解
短信预约 -IT技能 免费直播动态提醒
1 概要
deque 是一个双端队列, 如果要经常从两端append 的数据, 选择这个数据结构就比较好了, 如果要实现随机访问,不建议用这个,请用列表.
deque 优势就是可以从两边append ,appendleft 数据. 这一点list 是没有的.
#-*- coding: UTF-8 -*-
import time
from collections import deque
# 可以指定 队列的长度
mydeque=deque(maxlen=10)
mydeque.maxlen
Out[43]: 10
# 默认从右边加入
mydeque.append(10)
mydeque.append(12)
mydeque
Out[7]: deque([10, 12])
# time.sleep(4)
# 也可以从左边加入
mydeque.appendleft('a')
mydeque.appendleft('b')
mydeque.appendleft('c')
mydeque.appendleft('d')
mydeque.appendleft('e')
mydeque
Out[11]: deque(['e', 'd', 'c', 'b', 'a', 10, 12])
mylist= range(5,8)
# 也可以加入一个列表,默认从右边加入
# mydeque.extend(mylist)
mydeque.extendleft(mylist)
mydeque
Out[14]: deque([7, 6, 5, 'e', 'd', 'c', 'b', 'a', 10, 12])
# 出队列,返回出队列的元素
# 可以从左边也可以从右边 出队列
mydeque.pop()
mydeque.popleft()
# 查看 队列里面元素个数
print len(mydeque)
# 统计元素的个数
#统计a 有几个
print mydeque.count('a')
# 在某个位置insert 一个元素
# insert(i, x)
# Insert x into the deque at position i.
d1
Out[31]: deque([10, 12, 13, 14])
d1.insert(2,'frank')
d1
Out[33]: deque([10, 12, 'frank', 13, 14])
#翻转操作
# deque.reverse()
mydeque
Out[52]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
mydeque.reverse()
mydeque
Out[54]: deque([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
# remove 移除某个元素
mydeque
Out[23]: deque(['e', 'd', 'c', 'b', 'a', 10, 12])
mydeque.remove(10)
mydeque
Out[25]: deque(['e', 'd', 'c', 'b', 'a', 12])
# 清空队列元素 clear
mydeque
Out[46]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
mydeque.clear
Out[47]: <function deque.clear>
mydeque.clear()
mydeque
Out[49]: deque([])
# copy 浅拷贝
# Create a shallow copy of the deque.
l1 = [6, 5, 8, 3, 9, 0, 2, 7, 4, 1]
d3 = deque(l1)
d3
Out[64]: deque([6, 5, 8, 3, 9, 0, 2, 7, 4, 1])
d4 = d3.copy()
d4
Out[66]: deque([6, 5, 8, 3, 9, 0, 2, 7, 4, 1])
2 重要方法说明
rotate 方法:
移动到最后一个,占用第一个位置,循环移动, value 是步长,rotate(value) 对队列实行旋转操作(每个元素依次向后移动value步,最后一个移动到第一个算一步)
from collections import deque
d = deque()
d.extend(['a', 'b', 'c', 'd', 'e'])
d.rotate(2) # 指定次数,默认1次
print(d) # deque(['d', 'e', 'a', 'b', 'c'])
maxlen 要说明一下, 如果指定了 maxlen
- 如果构建deque 的时候,指定了maxlen, 则可以通过 d.maxlen 来获得dueue的最大长度.
- 如果插入的数据大于 maxlen 则会自动删除旧的元素.
- 删除 什么元素,取决于, 从哪边添加数据.
来看一下例子:
d = deque(list(range(5)),maxlen=5)
d
Out[21]: deque([0, 1, 2, 3, 4])
d.maxlen
Out[26]: 5
# 从左边添加元素, # 元素4 被挤出 队列
d.appendleft('frank')
d
Out[23]: deque(['frank', 0, 1, 2, 3])
# 从右边添加元素, 元素 'frank' 被挤出队列.
d
Out[23]: deque(['frank', 0, 1, 2, 3])
d.append('xiaoming')
d
Out[25]: deque([0, 1, 2, 3, 'xiaoming'])
3 总结
deque 是为了高效实现插入和删除操作的双向列表
总结 :
- deque 的方法 双端队列 ,进入队列,默认从右边进入,
- 出队列 默认从右边出队列,
- 移除队列元素
- insert()
- appendleft()
- append()
- extend(...)
- extendleft(...)
队列长度 len(deque)
- pop()
- popleft()
count(value) # 统计某个值出现的个数
remove(...)
reverse()
#轮询向前走n,最后一个元素往前移动,第一个元素依次后移
rotate(n=1)
清空队列: dequeue.clear()
deque 官方文档
到此这篇关于python 中collections的 deque使用详解的文章就介绍到这了,更多相关Python deque内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341