I w Pythonie
Deque oznacza kolejkę dwukończoną. Jest to specjalny typ struktury danych, który pozwala efektywnie dodawać i usuwać elementy z obu końców.
W przeciwieństwie do normalnych kolejek (które zwykle następują po kolejności „pierwsze weszło, pierwsze wyszło”) deque obsługuje zarówno operacje FIFO, jak i LIFO. Dzięki temu jest bardzo elastyczny i przydatny w rzeczywistych zastosowaniach, takich jak problemy z przesuwaniem się okna planowania zadań i przetwarzanie danych w czasie rzeczywistym.
Przykład:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Wyjście
deque(['name' 'age' 'DOB'])
Dlaczego potrzebujemy deque
- Obsługuje czas O(1) do dodawania/usuwania elementów z obu końców.
- Jest bardziej wydajny niż listy do operacji front-end.
- Może pełnić funkcję zarówno kolejki (FIFO), jak i stosu (LIFO).
- Idealny do planowania problemów z przesuwanymi oknami i przetwarzania danych w czasie rzeczywistym.
- Oferuje potężne wbudowane metody, takie jak dodatek po lewej() popleft() I obracać().
Rodzaje ograniczonego wejścia Deque
- Deque ograniczonego wejścia : Wprowadzanie danych jest ograniczone z jednej strony, a usuwanie jest dozwolone z obu stron.
- Ograniczenie wyjścia : wyjście jest ograniczone na jednym końcu, ale podłączenie jest dozwolone na obu końcach.
Operacje na deque
Oto tabela zawierająca wbudowane operacje deque w Pythonie wraz z opisami i odpowiadającymi im złożonościami czasowymi:
| Działanie | Opis | Złożoność czasu |
|---|---|---|
| dołącz (x) | Dodaje x na prawy koniec deque. | O(1) |
| dodatek po lewej stronie (x) | Dodaje x do lewego końca deque. | O(1) |
| muzyka pop() | Usuwa i zwraca element z prawego końca deque. | O(1) |
| popleft() | Usuwa i zwraca element z lewego końca deque. | O(1) |
| rozszerzać (iterowalny) | Dodaje wszystkie elementy z iterable na prawy koniec deque. | W porządku) |
| przedłuż w lewo(iterowalny) | Dodaje wszystkie elementy z iterable na lewy koniec deque (odwrotna kolejność). | W porządku) |
| usuń(wartość) | Usuwa pierwsze wystąpienie value z deka. Podnosi ValueError jeśli nie zostanie znaleziony. | NA) |
| obrócić (n) | Obraca deque n kroki w prawo. Jeśli n jest ujemny, obraca się w lewo. | W porządku) |
| jasne() | Usuwa wszystkie elementy z deque. | NA) |
| liczba (wartość) | Zlicza liczbę wystąpień value w deku. | NA) |
| indeks (wartość) | Zwraca indeks pierwszego wystąpienia value w deku. Podnosi ValueError jeśli nie zostanie znaleziony. | NA) |
| odwracać() | Odwraca elementy deque na miejscu. | NA) |
Dołączanie i usuwanie elementów z kolejki
- dołącz(x): Dodaje x na prawym końcu deque.
- dodatek po lewej stronie (x): Dodaje x do lewego końca deque.
- rozszerzać (iterowalny): Dodaje wszystkie elementy od iterowalnego do prawego końca.
- przedłuż w lewo(iterowalny): Dodaje wszystkie elementy z iterowalnego końca na lewy koniec (w odwrotnej kolejności).
- usuń(wartość): Usuwa pierwsze wystąpienie określonej wartości z deque. Jeśli wartość nie zostanie znaleziona, zgłosi błąd ValueError.
- muzyka pop(): Usuwa i zwraca element z prawego końca.
- popleft(): Usuwa i zwraca element z lewego końca.
- jasne(): Usuwa wszystkie elementy z deque.
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 )
Wyjście:
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([])Dostęp do elementu i długość deque
- Indeksowanie: Dostęp do elementów według pozycji przy użyciu indeksów dodatnich lub ujemnych.
- tylko(): Zwraca liczbę elementów w deque.
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 ))
Wyjście
1 4 7
Liczba rotacji i odwrócenia deque
- liczba(wartość): Ta metoda zlicza liczbę wystąpień określonego elementu w deque.
- obrócić (n): Ta metoda obraca deque o n kroków. Dodatnie n obraca się w prawo, a ujemne n obraca się w lewo.
- odwracać(): Ta metoda odwraca kolejność elementów w deque.
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 )
Wyjście
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])