Ce face collections.deque
deque (se citește „deck”) este o listă optimizată pentru operații la capete. append() și pop() lucrează la dreapta, appendleft() și popleft() la stânga, toate în timp constant. La o listă obișnuită, insert(0, x) și pop(0) sunt lente.
Cu maxlen, coada are o lungime maximă: când este plină, adăugarea la un capăt scoate automat un element de la celălalt. Este perfect pentru „ultimele N” valori (istoric, medii mobile).
Parametri
| Parametru | Descriere |
|---|---|
iterabil |
Opțional. Elementele inițiale. |
maxlen |
Opțional. Lungimea maximă. |
Ce returnează
Un obiect deque.
Exemple
Exemplul 1: Coadă de așteptare
from collections import deque
coada = deque(["Ana", "Dan"])
coada.append("Ioana")
coada.appendleft("Urgent: Mihai")
print(coada)
print("Servit:", coada.popleft())
print("Ultimul pleacă:", coada.pop())
print(coada)
Rezultat
deque(['Urgent: Mihai', 'Ana', 'Dan', 'Ioana'])
Servit: Urgent: Mihai
Ultimul pleacă: Ioana
deque(['Ana', 'Dan'])
Exemplul 2: Ultimele N valori cu maxlen
from collections import deque
ultimele = deque(maxlen=3)
for temperatura in [18, 20, 23, 21, 19]:
ultimele.append(temperatura)
print(list(ultimele), "medie:", round(sum(ultimele) / len(ultimele), 1))
print(ultimele.maxlen)
Rezultat
[18] medie: 18.0
[18, 20] medie: 19.0
[18, 20, 23] medie: 20.3
[20, 23, 21] medie: 21.3
[23, 21, 19] medie: 21.0
3
Greșeli frecvente
- Accesezi des elemente din mijloc (
d[500]) pe un deque mare. Accesul prin index la mijloc este mai lent decât la o listă.
Comenzi înrudite
deque: rotate(), extendleft() și celelalte metode: Rotirea unui deque și restul metodelor lui, asemănătoare cu cele ale listelor.list.pop(): Scoate un element din listă (implicit ultimul) și îl returnează.list.insert(): Inserează un element într-o listă, pe o poziție dată.