文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python中的deque模块(collections的deque模块)

2023-09-25 13:35

关注

目录

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

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

2.1 创建deque的方法

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

2.3  deque的 appendleft()方法

2.4 deque的 clear()方法

2.5 deque的 copy()方法

2.6 deque的count方法

2.7 deque中的extend()方法

2.8 deque中的extendleft()方法

2.9 deque中的index方法

2.10 deque中的insert方法

2.11 deque中的pop方法

2.12 deque中的popleft方法

2.13 deque中的remove方法

2.14 deque中的reverse方法

2.15 deque中的rotate方法


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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯