И в Python

И в Python

Deque означава Double-Ended Queue. Това е специален тип структура от данни, която ви позволява ефективно да добавяте и премахвате елементи от двата края.

За разлика от нормалните опашки (които обикновено следват First In First Out) deque поддържа както FIFO, така и LIFO операции. Това го прави много гъвкав и полезен в приложения от реалния свят, като проблеми с плъзгащи се прозорци за планиране на задачи и обработка на данни в реално време.

Пример:

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

Изход
deque(['name' 'age' 'DOB'])  
Следователно

Защо имаме нужда от deque

  • Поддържа O(1) време за добавяне/премахване на елементи от двата края.
  • Той е по-ефективен от списъците за предни операции.
  • Може да функционира както като опашка (FIFO), така и като стек (LIFO).
  • Идеален за планиране на проблеми с плъзгащи се прозорци и обработка на данни в реално време.
  • Той предлага мощни вградени методи като appendleft() popleft() и завъртане().

Видове ограничено въвеждане на Deque

  • Deque с ограничен вход :  Въвеждането е ограничено от единия край, докато изтриването е разрешено от двата края.
  • Ограничен изход Deque : изходът е ограничен в единия край, но вмъкването е разрешено и в двата края.

Операции върху deque 

Ето таблица, в която са изброени вградените операции на deque в Python с описания и съответните времеви сложности:



Операция Описание Времева сложност
добавям (x) Добавя x до десния край на дека. О(1)
добавка вляво (x) Добавя x до левия край на дека. О(1)
поп () Премахва и връща елемент от десния край на деке. О(1)
popleft() Премахва и връща елемент от левия край на деке. О(1)
разширяване (повтарящо се) Добавя всички елементи от iterable до десния край на дека. добре)
удължаване наляво (повтарящо се) Добавя всички елементи от iterable до левия край на деке (обърнат ред). добре)
премахване (стойност) Премахва първото появяване на value от дека. Повишава ValueError ако не се намери. O(n)
завъртане (n) Завърта дека n стъпки надясно. Ако n е отрицателна се върти наляво. добре)
ясно() Премахва всички елементи от deque. O(n)
брой (стойност) Отчита броя на срещанията на value в дека. O(n)
индекс (стойност) Връща индекса на първото появяване на value в дека. Повишава ValueError ако не се намери. O(n)
обратен() Обръща елементите на deque на място. O(n)

Добавяне и изтриване на елементи от опашката

  • добавям (x): Добавя x към десния край на двойката.
  • добавяне наляво (x): Добавя x към левия край на двойката.
  • разширяване (итерируем): Добавя всички елементи от итерируемия до десния край.
  • разширение наляво (повтарящо се): Добавя всички елементи от итерируемия до левия край (в обратен ред).
  • премахване (стойност): Премахва първото срещане на посочената стойност от deque. Ако стойността не бъде намерена, тя повдига ValueError.
  • поп(): Премахва и връща елемент от десния край.
  • popleft(): Премахва и връща елемент от левия край.
  • ясно (): Премахва всички елементи от deque.
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([])

Достъп до елемент и дължина на 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  

Преброяване на ротация и обръщане на двойка

  • брой (стойност): Този метод отчита броя на срещанията на конкретен елемент в deque.
  • завъртане (n): Този метод завърта deque с n стъпки. Положителното n се върти надясно, а отрицателното n се върти наляво.
  • обратен(): Този метод обръща реда на елементите в deque.
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])  

Топ Статии

Категория

Интересни Статии