python队列——deque模块

deque是collections中的一个类

from collections import deque

 deque的对象类似一个列表。deque对象的大小可以固定;deque是一个双向的队列,可以在队列的两端执行添加和弹出元素的操作。

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

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

deque的使用:

1.创建deque

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

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

 2.创建deque,并指定大小maxlen & 添加元素append()方法

from collections import deque
 
# 创建一个deque, 并指定最大的元素是3个
# 当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉
data = deque([(9,1)],maxlen=3)
data.append(1)
data.append(2)
print(data)   # deque([(9, 1), 1, 2], maxlen=3)
data.append(3)
print(data)   # deque([1, 2, 3], maxlen=3)
data.append(4)
print(data)   # deque([2, 3, 4], maxlen=3)

 3.deque的appendleft()方法从队列左侧添加数据,append()默认从右侧添加

from collections import deque
 
 
data = deque('123')
print(data)  # deque(['1', '2', '3'])
data.appendleft(0)
print(data)  # deque([0, '1', '2', '3'])

4.deque的clear()方法,清空队列

from collections import deque
 
 
data = deque('123')
print(data) # deque(['1', '2', '3'])
data.clear()
print(data) # deque([])

 5.copy()方法,相当于深拷贝,生成一个新的deque队列,原队列的值修改不会影响拷贝后的值

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

6.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
'''

 7.extend方法,extend(value),将一个deque队列与另一个对象合并,value可以是deque对象,字符串,列表,元组等

from collections import deque
 
 
data1 = deque('123')
data2 = deque('456')
data3 = [7,8,9]
data4 = (10,11,12)
data5 = 'abc'
data1.extend(data2)  # 合并deque队列
print(data1)
data1.extend(data3)  # 合并数组
print(data1)
data1.extend(data4)  # 合并元祖
print(data1)
data1.extend(data5)  # 合并字符串
print(data1)
'''
deque(['1', '2', '3', '4', '5', '6'])
deque(['1', '2', '3', '4', '5', '6', 7, 8, 9])
deque(['1', '2', '3', '4', '5', '6', 7, 8, 9, 10, 11, 12])
deque(['1', '2', '3', '4', '5', '6', 7, 8, 9, 10, 11, 12, 'a', 'b', 'c'])
'''

8.extendleft方法,extendleft(value),从左侧合并,value的值是反着合并到队列里面的

from collections import deque
 
 
data1 = deque('123')
data1.extendleft('456')
print(data1)      # deque(['6', '5', '4', '1', '2', '3'])

9.index方法,index(value,start = None,end=None),获取deque队列元素的索引位置。

value是队列中的元素,start是起始点,end是终止点(不包括end点)

from collections import deque
 
data1 = deque('helloword')
print(data1.index('o'))     # 有多个的话,取第一个的索引位置,4
print(data1.index('o', 5))  # 从第五个开始(索引从0开始),6
print(data1.index('o', 5, 8))  # 从第五个开始 -- 第八个结束,6
print(data1.index('o', 4, 8))  # 从第四个开始 -- 第八个结束,4
print(data1.index('o', 5, 6))  # 从第五个开始 -- 第六个结束,报错ValueError: 'o' is not in deque

10.insert方法,insert(index,value),在第index+1位置上,插入value值 

from collections import deque
 
data1 = deque('helloword')
data1.insert(1, '1')    # 在第二个位置上插入 1
data1.insert(0, '2')    # 在第一个位置上插入 2
data1.insert(0, ['123'])    # 在第一个位置上插入 列表123
 
print(data1) # deque([['123'], '2', 'h', '1', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd'])

11.pop方法,pop()从尾部(右侧)弹出并返回弹出的这个元素,popleft()从头部(左侧)弹出并返回。 

from collections import deque
 
data1 = deque('12345')
print(data1.pop())  # 弹出元素,从右侧即末尾弹出,并返回 5
print(data1.pop())  # 弹出元素,从右侧即末尾弹出,并返回 4
print(data1)        # deque(['1', '2', '3'])
print(data1.popleft()) # 左侧弹出并返回 1
print(data1)        # deque(['2', '3'])
 

12.remove方法,remove(value),移除deque队列中的value元素 

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

13.reverse方法,将deque队列进行反转

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

14.rotate方法,rotate(),将队列向右循环位移n步(默认n=1),若n为负,则向左循环位移

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值