目录
1. deque是python的collections中的一个类
2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法
1. deque是python的collections中的一个类
deque的对象像是一个列表,只不过可以固定这个deque对象的大小,以及列表是在队列的两端执行添加和弹出元素的操作,可以理解为,deque是一个双向的队列,
尽管你也可以手动在一个列表上实现这一的操作(比如增加、删除等等)。但是这里的队列方案会更加优雅并且运行得更快些。
以下是部分源码,以及部分方法:
class deque(object): """ deque([iterable[, maxlen]]) --> deque object A 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. """ pass def appendleft(self, *args, **kwargs): # real signature unknown """ Add an element to the left side of the deque. """ pass def clear(self, *args, **kwargs): # real signature unknown """ Remove all elements from the deque. """ pass def copy(self, *args, **kwargs): # real signature unknown """ Return a shallow copy of a deque. """ pass def count(self, value): # real signature unknown; restored from __doc__ """ D.count(value) -> integer -- return number of occurrences of value """ return 0 def extend(self, *args, **kwargs): # real signature unknown """ Extend the right side of the deque with elements from the iterable """ pass def extendleft(self, *args, **kwargs): # real signature unknown """ Extend the left side of the deque with elements from the iterable """ pass def 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 0 def insert(self, index, p_object): # real signature unknown; restored from __doc__ """ D.insert(index, object) -- insert object before index """ pass def pop(self, *args, **kwargs): # real signature unknown """ Remove and return the rightmost element. """ pass def popleft(self, *args, **kwargs): # real signature unknown """ Remove and return the leftmost element. """ pass def remove(self, value): # real signature unknown; restored from __doc__ """ D.remove(value) -- remove first occurrence of value. """ pass def reverse(self): # real signature unknown; restored from __doc__ """ D.reverse() -- reverse *IN PLACE* """ pass def 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.4 deque的 clear()方法
清空deque队列,让其变成空队列
from collections import dequedata = deque('123')print(data)print("=" * 60)data.clear()print(data)
运行结果
deque(['1', '2', '3'])============================================================deque([])
2.5 deque的 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.8 deque中的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.14 deque中的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.15 deque中的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'])
来源地址:https://blog.csdn.net/wei18791957243/article/details/126891658