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

目录

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

# 创建一个空的deque
data = deque()
print(data)
print("=" * 60)
# 创建有数据的deque
data1 = deque('abcd')
print(data1)
print("=" * 60)
# 创建有数据的deque
data2 = 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 deque


data = 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 deque


data = deque('123')
print(data)
print("=" * 60)
data.clear()
print(data)

运行结果

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

2.5 deque的 copy()方法

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

from collections import deque


data1 = 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的地址 2404465361192
data2的地址 2404465361304
修改数据后,看变化
deque(['1', '2', '3', '4'])
============================================================
deque(['1', '2', '3'])

2.6 deque的count方法

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

from collections import deque


data1 = 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 deque


data1 = 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 deque


data1 = 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 deque

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

运行结果:

4
6
6

2.10 deque中的insert方法

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

from collections import deque

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

print(data1)

运行结果:

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

2.11 deque中的pop方法

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

from collections import deque

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


2.12 deque中的popleft方法

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

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

from collections import deque

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


2.13 deque中的remove方法

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

from collections import deque

data1 = deque('12345')
data1.remove('1')
print(data1)

2.14 deque中的reverse方法

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

from collections import deque

data1 = 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 deque

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

  • 12
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值