python_双向队列deque

collections.deque

deque(maxlen=N) 创建一个固定长度的双向队列,特点: 当新的队列已满时,会自动移除最老的那条记录.

deque与列表区别在于:

从队列两端添加或弹出元素复杂度都是O(1)。从列表的头部插入或移除元素是,列表的复杂度为O(N)

下面对deque类源码的方法功能足以介绍

class deque(MutableSequence[_T], Generic[_T]):
    @property
    def maxlen(self) -> Optional[int]: ...
    def __init__(self, iterable: Iterable[_T] = ...,
                 maxlen: int = ...) -> None: ...
    def append(self, x: _T) -> None: ...
    def appendleft(self, x: _T) -> None: ...
    def clear(self) -> None: ...
    if sys.version_info >= (3, 5):
        def copy(self) -> deque[_T]: ...
    def count(self, x: _T) -> int: ...
    def extend(self, iterable: Iterable[_T]) -> None: ...
    def extendleft(self, iterable: Iterable[_T]) -> None: ...
    def insert(self, i: int, x: _T) -> None: ...
    def index(self, x: _T, start: int = ..., stop: int = ...) -> int: ...
    def pop(self, i: int = ...) -> _T: ...
    def popleft(self) -> _T: ...
    def remove(self, value: _T) -> None: ...
    def reverse(self) -> None: ...
    def rotate(self, n: int) -> None: ...
  • maxlen:

    指定队列长度,当有新的队列已满时会自动移除最老的那条记录

    如果不指定队列的大小,也就得到了一个无界限的队列,可以在两端执行添加和弹出操作

    from collections import deque
    
    d = deque(maxlen=2)
    d.append("A")
    d.append("B")
    d.append("C")
    d.append("D")
    print(d)
    
    # 输出: deque(['C', 'D'], maxlen=2)
    
  • apend

    往队列右边添加一个元素

    from collections import deque
    
    d = deque()
    print(d)  
    
    # 输出: deque([])
    
    d.apend("A")
    d.append("B")
    print(d) 
    # 输出: deque(['A', 'B']) 
    
  • appendleft

    往队列左边添加一个元素

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.appendleft("E")
    print(d)  
    # 输出: deque(['E', 'A', 'B'])
    
  • clear

    清空队列所有元素

  • copy

    浅拷贝

  • count

    返回指定元素在队列中的个数

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.append("B")
    print(d)
    # 输出: deque(['A', 'B', 'B'])
    print(d.count("B"))
    # 输出: 2
    
  • extend

    在队列右边追加一个序列

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.extend([1,2,3])
    print(d)
    
    # 输出: deque(['A', 'B', 1, 2, 3])
    
  • extendleft

    在队列左边追加一个序列

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.extendleft([1,2,3])
    print(d)
    
    # 输出: deque([3, 2, 1, 'A', 'B'])
    
  • insert

    在指定位置插入元素

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.insert(0, 'i')
    print(d)
    
    # 输出: deque(['i', 'A', 'B'])
    
  • index

    查找某个元素的索引位置

  • pop

    删除队列最右边元素,并返回

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.appendleft("C")
    print(d)
    
    # 输出: deque(['C', 'A', 'B'])
    print(d.pop())
    # 输出: B
    
  • popleft

    删除队列最左边元素,并返回

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.appendleft("C")
    print(d)
    
    # 输出: deque(['C', 'A', 'B'])
    print(d.popleft())
    # 输出: c
    
  • remove

    删除队列指定元素

  • reverse

    反转队列

  • rotate

    把队列最右边元素移至左边

    from collections import deque
    
    d = deque()
    d.append("A")
    d.append("B")
    d.append("C")
    d.append("D")
    print(d)
    # 输出: deque(['A', 'B', 'C', 'D'])
    
    d.rotate(1)  # 参数为指定次数
    print(d)
    # 输出: deque(['D', 'A', 'B', 'C'])
    
    d.rotate(2)
    print(d)
    # 输出: deque(['C', 'D', 'A', 'B'])
    
    

你可能感兴趣的:(python,进阶,deque)