Python deque
阿常呓语 人气:01 概要
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()
加载全部内容