logo

И в 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']) 
Следователно' title=

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

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

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

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

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

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

java е празна
Операция Описание Времева сложност
добавям (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])