そしてPythonでは

そしてPythonでは

deque は Double-Ended Queue の略です。これは、両端から要素を効率的に追加および削除できる特別なタイプのデータ構造です。

通常のキュー (通常は先入れ先出しに従います) とは異なり、デキューは FIFO 操作と LIFO 操作の両方をサポートします。これにより、タスク スケジューリング スライディング ウィンドウの問題やリアルタイム データ処理など、現実世界のアプリケーションで非常に柔軟で便利になります。

例:

Python
   from   collections   import   deque   # Declaring deque    de   =   deque  ([  'name'    'age'    'DOB'  ])   print  (  de  )   

出力
deque(['name' 'age' 'DOB'])  
したがって

なぜデックが必要なのか

  • 両端からの要素の追加/削除にかかる時間は O(1) です。
  • フロントエンド操作ではリストよりも効率的です。
  • キュー (FIFO) とスタック (LIFO) の両方として機能します。
  • スライディング ウィンドウ問題やリアルタイム データ処理のスケジュール設定に最適です。
  • 次のような強力な組み込みメソッドを提供します。 appendleft() ポップレフト() そして 回転()。

制限付きデキュー入力のタイプ

  • 入力制限されたデキュー : 入力は一方の端で制限されていますが、削除は両端で許可されています。
  • 出力制限付きデキュー : 出力は一端で制限されますが、両端での挿入は許可されます。

デックに対する操作 

以下の表は、Python の両端キューの組み込み操作と、その説明および対応する時間計算量をリストしたものです。

手術 説明 時間計算量
追加(x) 追加します x 両端子キューの右端に。 ○(1)
左に追加(x) 追加します x 両端子キューの左端に。 ○(1)
ポップ() 両端キューの右端から要素を削除して返します。 ○(1)
ポップレフト() 両端キューの左端から要素を削除して返します。 ○(1)
拡張(反復可能) すべての要素を追加します iterable 両端子キューの右端に。 大丈夫)
extendleft(反復可能) すべての要素を追加します iterable 両端キューの左端に移​​動します (順序が逆)。 大丈夫)
削除(値) 最初に出現したものを削除します value デクから。レイズ ValueError 見つからない場合。 の上)
回転(n) デキューをローテーションします n 右へのステップ。もし n 負の場合は左に回転します。 大丈夫)
クリア() 両端キューからすべての要素を削除します。 の上)
カウント(値) の出現回数をカウントします。 value デクで。 の上)
インデックス(値) 最初に出現したインデックスを返します。 value デクで。レイズ ValueError 見つからない場合。 の上)
逆行する() 両端キューの要素をその場で反転します。 の上)

デキュー項目の追加と削除

  • 追加(x): x を両端キューの右端に追加します。
  • 追加左(x): 両端キューの左端に x を追加します。
  • 拡張(反復可能): 反復可能な要素から右端までのすべての要素を追加します。
  • extendleft(反復可能): すべての要素を反復可能要素から左端まで (逆の順序で) 追加します。
  • 削除(値): 指定された値の最初の出現を両端キューから削除します。値が見つからない場合は、ValueError が発生します。
  • ポップ(): 右端から要素を削除して返します。
  • ポップレフト(): 左端から要素を削除して返します。
  • クリア(): 両端キューからすべての要素を削除します。
Python
   from   collections   import   deque   dq   =   deque  ([  10     20     30  ])   # Add elements to the right   dq  .  append  (  40  )   # Add elements to the left   dq  .  appendleft  (  5  )   # extend(iterable)   dq  .  extend  ([  50     60     70  ])   print  (  'After extend([50 60 70]):'     dq  )   # extendleft(iterable)   dq  .  extendleft  ([  0     5  ])   print  (  'After extendleft([0 5]):'     dq  )   # remove method   dq  .  remove  (  20  )   print  (  'After remove(20):'     dq  )   # Remove elements from the right   dq  .  pop  ()   # Remove elements from the left   dq  .  popleft  ()   print  (  'After pop and popleft:'     dq  )   # clear() - Removes all elements from the deque   dq  .  clear  ()   # deque: []   print  (  'After clear():'     dq  )   

出力:

 After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])   
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])

アイテムへのアクセスと両端キューの長さ

  • インデックス作成: 正または負のインデックスを使用して、位置によって要素にアクセスします。
  • のみ(): 両端キュー内の要素の数を返します。
Python
   import   collections   dq   =   collections  .  deque  ([  1     2     3     3     4     2     4  ])   # Accessing elements by index   print  (  dq  [  0  ])   print  (  dq  [  -  1  ])   # Finding the length of the deque   print  (  len  (  dq  ))   

出力
1 4 7  

デックの回転と反転をカウントする

  • カウント(値): このメソッドは、両端キュー内の特定の要素の出現数をカウントします。
  • 回転(n): このメソッドは、両端キューを n ステップずつ回転させます。正の n は右に回転し、負の n は左に回転します。
  • 逆行する(): このメソッドは、両端キュー内の要素の順序を逆にします。
Python
   from   collections   import   deque   # Create a deque   dq   =   deque  ([  10     20     30     40     50     20     30     20  ])   # 1. Counting occurrences of a value   print  (  dq  .  count  (  20  ))   # Occurrences of 20   print  (  dq  .  count  (  30  ))   # Occurrences of 30   # 2. Rotating the deque   dq  .  rotate  (  2  )   # Rotate the deque 2 steps to the right   print  (  dq  )   dq  .  rotate  (  -  3  )   # Rotate the deque 3 steps to the left   print  (  dq  )   # 3. Reversing the deque   dq  .  reverse  ()   # Reverse the deque   print  (  dq  )   

出力
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])