logo

そして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']) 
したがって' title=

なぜデックが必要なのか

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

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

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

デックに対する操作 

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

arpコマンド
手術 説明 時間計算量
追加(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])