deque,是双向队列,是一种高性能的数据结构之一.它的操作类似于列表list,但比list拥有更低的时间复杂度和空间复杂度。
from collections import deque
deque1 = deque([1, 2, 3, 4])
print(deque1)
result:
deque([1, 2, 3, 4])
为了便于叙述,先生成一个双向队列以供使用。下面的代码将直接引用操作该队列,不再重新定义生成。
现在介绍常用方法如下:
1 append方法
该方法和list的append方法一样,都是从末尾(队尾)添加元素
deque1.append(5)
print(deque1)
result:
deque([1, 2, 3, 4, 5])
2 appendleft方法
该方法是从队首插入元素,虽然list的insert(0, obj)也能实现该效果,但性能不如该方法
deque1.appendleft(6)
print(deque1)
result:
deque([6, 1, 2, 3, 4])
3 clear方法
该方法和list的clear方法一样,都是清空里面的所有元素。
deque1.clear()
print(deque1)
result:
deque([])
4 count方法
该方法和list的count方法一样,返回队列中包含value的个数
print(deque1.count(4))
result:
1
5 extend方法
该方法和list的extend方法一样,用于扩展序列
5.1 扩展的内容为字典时
extend添加的对象为字典时,会将字典的key加入到队列,value则被丢弃
deque1.extend({1: 2})
print(deque1)
result:
deque([1, 2, 3, 4, 1])
5.2 其他
deque1.extend([5])
print(deque1)
result:
deque([1, 2, 3, 4, 5])
6 extendleft方法
作用和extend一样,只不过该方法是在队首开始扩展,而extend是在队尾进行扩展
deque1.extendleft([5])
print(deque1)
result:
deque([5, 1, 2, 3, 4])
7 pop方法
该方法和list的pop方法一样,用于删除末尾的元素
deque1.pop()
print(deque1)
result:
deque([1, 2, 3])
8 popleft方法
作用和pop一样,只不过该方法是从队首删除元素,而pop是从队尾删除元素。和list的pop(0)效果一致。
deque1.extendleft([5])
print(deque1)
result:
deque([2, 3, 4])
9 remove方法
该方法和list的remove方法一样,用于删除第一次出现的元素。当然,被删除的元素不存在则会报错
deque2 = deque([1, 2, 3, 4, 1, 5])
deque2.remove(1)
print(deque2)
result:
deque([2, 3, 4, 1, 5])
10 reverse方法
该方法和list的reverse方法一样,用于元素反转
deque1.reverse()
print(deque1)
result:
deque([4, 3, 2, 1])
11 rotate方法
对队列内的元素进行移动
11.1 移动长度为正数
此时相当于元素从左向右移动
deque1.rotate(1)
print(deque1)
result:
deque([4, 1, 2, 3])
这里是将队列向右移动一个单位,最后一个元素移到了最前面,其余的元素按顺序依次右移
deque1.rotate(3)
print(deque1)
result:
deque([2, 3, 4, 1])
这里是将队列向右移动三个单位,相当于把,相当于把deque1.rotate(1)的动作重复了三遍
11.2 移动长度为负数
此时相当于元素从右向左移动
deque1.rotate(-1)
print(deque1)
result:
deque([2, 3, 4, 1])
这里是将队列向左移动以个单位,第一个元素移到了末尾,第二个元素移到了开头,第三个元素移到了第二的位置上,第四的元素移到了第三的位置上。
deque1.rotate(-3)
print(deque1)
result:
deque([4, 1, 2, 3])
这里是将队列向左移动三个单位,相当于把deque1.rotate(-1)的动作重复了三遍