目录

1. deque是python的collections中的一个类

2.deque的简单使用以及它的方法

2.1 创建deque的方法

2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

2.3 deque的appendleft()方法

2.4deque的 clear()方法

2.5deque的 copy()方法

2.6 deque的count方法

2.7 deque中的extend()方法

2.8deque中的extendleft()方法

2.9 deque中的index方法

2.10 deque中的insert方法

2.11 deque中的pop方法

2.12 deque中的popleft方法

2.13 deque中的remove方法

2.14deque中的reverse方法

2.15deque中的rotate方法


1. deque是python的collections中的一个类

deque的对象像是一个列表,只不过可以固定这个deque对象的大小,以及列表是在队列的两端执行添加和弹出元素的操作,可以理解为,deque是一个双向的队列,

尽管你也可以手动在一个列表上实现这一的操作(比如增加、删除等等)。但是这里的队列方案会更加优雅并且运行得更快些。

以下是部分源码,以及部分方法:

class deque(object):"""deque([iterable[, maxlen]]) --> deque objectA list-like sequence optimized for data accesses near its endpoints."""def append(self, *args, **kwargs): # real signature unknown""" Add an element to the right side of the deque. """passdef appendleft(self, *args, **kwargs): # real signature unknown""" Add an element to the left side of the deque. """passdef clear(self, *args, **kwargs): # real signature unknown""" Remove all elements from the deque. """passdef copy(self, *args, **kwargs): # real signature unknown""" Return a shallow copy of a deque. """passdef count(self, value): # real signature unknown; restored from __doc__""" D.count(value) -> integer -- return number of occurrences of value """return 0def extend(self, *args, **kwargs): # real signature unknown""" Extend the right side of the deque with elements from the iterable """passdef extendleft(self, *args, **kwargs): # real signature unknown""" Extend the left side of the deque with elements from the iterable """passdef index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__"""D.index(value, [start, [stop]]) -> integer -- return first index of value.Raises ValueError if the value is not present."""return 0def insert(self, index, p_object): # real signature unknown; restored from __doc__""" D.insert(index, object) -- insert object before index """passdef pop(self, *args, **kwargs): # real signature unknown""" Remove and return the rightmost element. """passdef popleft(self, *args, **kwargs): # real signature unknown""" Remove and return the leftmost element. """passdef remove(self, value): # real signature unknown; restored from __doc__""" D.remove(value) -- remove first occurrence of value. """passdef reverse(self): # real signature unknown; restored from __doc__""" D.reverse() -- reverse *IN PLACE* """passdef rotate(self, *args, **kwargs): # real signature unknown""" Rotate the deque n steps to the right (default n=1).If n is negative, rotates left. """pass

2.deque的简单使用以及它的方法

2.1 创建deque的方法

可以创建一个空的deque,也可以创建带数据的deque,这个数据,我们通过源码看,必须是一个可迭代的对象接口,列表,元组等等。

from collections import deque# 创建一个空的dequedata = deque()print(data)print("=" * 60)# 创建有数据的dequedata1 = deque('abcd')print(data1)print("=" * 60)# 创建有数据的dequedata2 = deque([1, 2, 3, 4])print(data2)print("=" * 60)

2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

from collections import deque# 创建一个空的deque, 并指定最大的元素是3个data = deque(maxlen=3)data.append(1)data.append(2)data.append(3)print(data)data.append(4)print(data)

运行结果,我们可以看到,当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉

2.3 deque的appendleft()方法

从deque队列的左侧添加数据,append()就是默认就尾部即右侧添加数据

from collections import dequedata = deque('123')print(data)print("=" * 60)data.appendleft(0)print(data)

运行结果

deque(['1', '2', '3'])============================================================deque([0, '1', '2', '3'])

2.4deque的 clear()方法

清空deque队列,让其变成空队列

from collections import dequedata = deque('123')print(data)print("=" * 60)data.clear()print(data)

运行结果

deque(['1', '2', '3'])============================================================deque([])

2.5deque的 copy()方法

deque的copy方法相当于深拷贝,拷贝后的地址不相同,并且原来的值修改后,不会影响拷贝后的值。

from collections import dequedata1 = deque('123')print(data1)print("=" * 60)data2 = data1.copy()print(data2)print("地址比较")print("data1的地址", id(data1))print("data2的地址", id(data2))print("修改数据后,看变化")data1.append('4')print(data1)print("=" * 60)print(data2)

运行结果:

deque(['1', '2', '3'])============================================================deque(['1', '2', '3'])地址比较data1的地址 2404465361192data2的地址 2404465361304修改数据后,看变化deque(['1', '2', '3', '4'])============================================================deque(['1', '2', '3'])

2.6 deque的count方法

count(value),获取deque队列中某个元素的个数

from collections import dequedata1 = deque('123333333')print(data1)print("=" * 60)count = data1.count('3')print(count)

运行结果:

deque(['1', '2', '3', '3', '3', '3', '3', '3', '3'])============================================================7

2.7 deque中的extend()方法

两个队列合并,extend(value), value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

from collections import dequedata1 = deque('123')data2 = deque('456')data1.extend(data2)print(data1)

运行结果

deque(['1', '2', '3', '4', '5', '6'])

2.8deque中的extendleft()方法

两个队列合并,从左侧合并,extendleft(value), value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

要注意。合并时候,value的值,也是反着来的,注意看下面的打印,从左侧开始往里面加

from collections import dequedata1 = deque('123')data1.extendleft('456')print(data1)

运行结果:

deque(['6', '5', '4', '1', '2', '3'])

2.9 deque中的index方法

index(value,start=None,end=None), 怎么使用请看代码

from collections import dequedata1 = deque('helloword')print(data1.index('o')) # 有多个的话,取第一个的索引位置print(data1.index('o', 5))# 从第五个开始(索引从0开始)print(data1.index('o', 5, 8))# 从第五个开始 -- 第八个结束

运行结果:

466

2.10 deque中的insert方法

insert(index,value), 在index位置上,插入value值, 注意顺序

from collections import dequedata1 = deque('helloword')data1.insert(0, '1')# 在第一个位置上插入 1data1.insert(0, '2')# 在第一个位置上插入 2data1.insert(0, ['123'])# 在第一个位置上插入 列表123print(data1)

运行结果:

deque([['123'], '2', '1', 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd'])

2.11 deque中的pop方法

pop() 方法弹出元素,从尾部弹出,并且返回弹出的这个元素

from collections import dequedata1 = deque('12345')print(data1.pop())# 弹出元素,从右侧即末尾弹出,并返回print(data1.pop())# 弹出元素,从右侧即末尾弹出,并返回print(data1)

2.12 deque中的popleft方法

popleft() 方法弹出元素,从头部弹出,并且返回弹出的这个元素

在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元 素的时间复杂度为 O(N) 。

from collections import dequedata1 = deque('12345')print(data1.popleft())# 弹出元素,从左侧侧即头部弹出,并返回print(data1.popleft())# 弹出元素,从左侧侧即头部弹出,并返回print(data1)

2.13 deque中的remove方法

remove(value)方法,将deque队列某个元素进行移除

from collections import dequedata1 = deque('12345')data1.remove('1')print(data1)

2.14deque中的reverse方法

reverse()方法,将deque队列进行反转

from collections import dequedata1 = deque('12345')data1.reverse()print(data1)
deque(['5', '4', '3', '2', '1'])Process finished with exit code 0

2.15deque中的rotate方法

rotate(n) , 将队列 向右旋转n步(默认n=1)。如果n为负,则向左旋转。

from collections import dequedata1 = deque('12345')data1.rotate(3)print(data1)data1.rotate(-3)print(data1)
deque(['3', '4', '5', '1', '2'])deque(['1', '2', '3', '4', '5'])