天天看點

python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

1. 概述

之前一篇部落格介紹了一下 python 中隊列的基本操作:Python 隊列子產品 Queue 的常用操作。但是我們發現了兩個問題:

  1. 向一個空的隊列進行 get() 操作會進入“死循環”
  2. get 操作和我們了解的 get 操作有點差異,我們有時隻需要知道隊頭元素時什麼,但是不想取出。可以在 Queue 子產品中,我們隻能先 get,然後重新放入,并且還要重新調整好順序。

今天的雙端隊列一方面可以解決上述問題,另一方面某些場景下棧和隊列都不能很好的對資料模組化,而雙端隊列可以。雙端隊列可以看成棧和隊列的結合,可以使用棧和隊列的場景也可以使用雙端隊列,但是反之不成立。

普通隊列隻能在隊尾添加,隊頭彈出。而雙端隊列在隊尾和隊頭都可以添加和彈出。隊尾的添加和彈出可以看成棧,隊尾的添加和隊頭的彈出可以看成隊列。

2. 基本方法

引入子產品并建立一個雙端隊列:

import collections


d = collections.deque()
           

2.1 len(d) :傳回隊列中元素的數量。

import collections


d = collections.deque()
d.append(1)
d.append(2)
d.append(3)
d.append(4)
d.append(50)
print(d)
print(len(d))
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.2 d.appendleft(x) :将元素 x 加到隊頭。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(len(d))
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.3 d.append(x) :将元素 x 加到隊尾。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(len(d))
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.4 d.popleft() :将隊頭元素彈出,并作為傳回值,如果雙端隊列為空會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(len(d))
print(d.popleft())
print(d)
print(len(d))
print(d.pop())
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.5 d.pop() :将隊尾元素彈出,并作為傳回值,如果雙端隊列為空會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(len(d))
print(d.popleft())
print(d)
print(len(d))
print(d.pop())
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.6 d[0] :通路并傳回隊頭元素,但不彈出,如果雙端隊列為空會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(d[0])
print(d[-1])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.7 d[-1] :通路并傳回隊尾元素,但不彈出,如果雙端隊列為空會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(d[0])
print(d[-1])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.8 d[j] :通過索引通路任意一項,如果索引(隊列内部以 0 索引開頭)超過範圍會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(d[2])
d[2] = 100
print(d[2])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.9 d[j] = val :通過索引修改任意一項,如果索引(隊列内部以 0 索引開頭)超過範圍會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
print(d[2])
d[2] = 100
print(d[2])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.10 d.clear() :清空雙端隊列。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
d.clear()
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.11 d.rotate(k) :循環右移 k 步。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(3)
d.appendleft(4)
d.append(50)
print(d)
d.rotate(2)
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.12 d.remove(e) :移除第一個比對的元素,如果隊列中沒有比對元素會報錯。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(50)
d.append(3)
d.appendleft(4)
d.append(50)
d.append(50)
d.append(50)
print(d)
d.remove(50)
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.13 d.count(e) :統計對于 e 比對的數量,如果隊列中沒有此元素,計數為 0。

import collections


d = collections.deque()
d.append(1)
d.appendleft(2)
d.append(50)
d.append(3)
d.appendleft(4)
d.append(50)
d.append(50)
d.append(50)
print(d)
print(d.count(50))
d.remove(50)
print(d)
print(d.count(50))
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.14 d.extend(list):隊尾擴充多個元素

import collections


d = collections.deque()
d.append(1)
d.append(2)
print(d)
d.extend([3, 4, 5])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.15 d.extendleft(list):隊頭擴充多個元素,是把 list 中的元素按順序放在隊頭,是以 list 中左邊的元素在雙端隊列中會在右邊。

import collections


d = collections.deque()
d.append(1)
d.append(2)
print(d)
d.extendleft([3, 4, 5])
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.16 d.index(e) :傳回第一個比對元素的位置索引,如果隊列中沒有比對元素會報錯。

import collections


d = collections.deque()
d.append(1)
d.append(1)
d.append(2)
print(d)
d.extendleft([3, 4, 5])
print(d)
print(d.index(1))
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2.17 d.insert(index,a) :将 a 放入index 索引。index 支援負索引,超出右邊索引會添加到最右邊,超過左邊索引會添加到最左邊。

import collections


d = collections.deque()
d.append(1)
d.append(1)
d.append(2)
d.extendleft([3, 4, 5])
print(d)
d.insert(1, 100)
print(d)
d.insert(47, 200)
d.insert(-100, 300)
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法

2. 18 d.reverse():反轉雙端隊列

import collections


d = collections.deque()
d.append(1)
d.append(1)
d.append(2)
d.extendleft([3, 4, 5])
print(d)
d.insert(1, 100)
print(d)
d.insert(47, 200)
d.insert(-100, 300)
print(d)
d.reverse()
print(d)
           
python 雙端隊列:collections.deque 基本方法總結1. 概述2. 基本方法