deque()

deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。

常用方法:

append()

从右端添加元素(与list同

1
2
3
4
5
6
7
8
9
10
11
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.append(4)
dlist1.append("k")
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', 4])
#deque([0, 1, 2, 3, 'k'])

appendleft()

从左端添加元素

1
2
3
4
5
6
7
8
9
10
11
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.appendleft(4)
dlist1.appendleft("k")
print(dst)
print(dlist1)
#结果:
#deque([4, 'a', 'b', 'c', 'd'])
#deque(['k', 0, 1, 2, 3])

extend()

从右端逐个添加可迭代对象(与list同
Python中的可迭代对象有:列表、元组、字典、字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
from collections import deque
ex = (1, "h", 3)
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', 1, 'h', 3])
#deque([0, 1, 2, 3, 1, 'h', 3])

extendleft()

从左端逐个添加可迭代对象

pop()

移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError

popleft()

移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError

count()

统计队列中的元素个数(与list同

insert(index,obj)

在指定位置插入元素(与list同

rotate(n)

rotate(n), 从右侧反转n步,如果n为负数,则从左侧反转。
d.rotate(1) 等于 d.appendleft(d.pop())

clear()

将deque中的元素全部删除,最后长度为0

remove()

移除第一次出现的元素,如果没有找到,报出ValueError

maxlen

只读的属性,deque限定的最大长度,如果无,就返回None。
当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除

1
2
3
st = "abbcd"
dq = deque()
dq.append(st)