collections — tipuri de colecții și containere¶
Acest modul oferă tipuri de date container specializate care completează tipurile încorporate list, tuple, dict și set: o coadă cu două capete (deque), o fabrică de tupluri cu câmpuri denumite (namedtuple()) și un dicționar care păstrează ordinea (OrderedDict).
Clase¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Cozile cu două capete (deque) sunt un container asemănător unei liste care permite adăugări și extrageri în O(1) de la oricare dintre cele două capete. Cozile noi se creează folosind următoarele argumente:
iterable este un obiect iterabil folosit pentru a popula coada la crearea acesteia. Poate fi un tuplu sau o listă goală pentru a crea o coadă inițial goală.
maxlen trebuie specificat, iar coada va fi limitată la această lungime maximă. Odată ce coada este plină, orice element nou adăugat va elimina elemente de la capătul opus.
Parametrul opțional flags poate fi 1 pentru a verifica depășirea la adăugarea de elemente.
Obiectele deque acceptă
bool,len(), iterarea, precum și citirea și scrierea prin indexare. De asemenea, au următoarele metode:- append(x: Any) None¶
Adaugă x în partea dreaptă a cozii. Generează
IndexErrordacă verificarea depășirii este activată și nu mai există loc în coadă.
- appendleft(x: Any) None¶
Adaugă x în partea stângă a cozii. Generează
IndexErrordacă verificarea depășirii este activată și nu mai există loc în coadă.
- pop() Any¶
Elimină și returnează un element din partea dreaptă a cozii. Generează
IndexErrordacă nu există elemente.
- popleft() Any¶
Elimină și returnează un element din partea stângă a cozii. Generează
IndexErrordacă nu există elemente.
- extend(iterable: Iterable) None¶
Extinde coada adăugând toate elementele din iterable în partea dreaptă a cozii. Generează
IndexErrordacă verificarea depășirii este activată și nu mai există loc în coadă.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Aceasta este o funcție de tip fabrică pentru crearea unui nou tip namedtuple cu un nume specific și un set de câmpuri. Un namedtuple este o subclasă a lui tuple care permite accesarea câmpurilor sale nu doar prin index numeric, ci și printr-o sintaxă de acces la atribute folosind nume simbolice de câmpuri. Fields este o secvență de șiruri de caractere care specifică numele câmpurilor. Pentru compatibilitate cu CPython, poate fi și un șir cu numele câmpurilor separate prin spații (dar acest lucru este mai puțin eficient). Exemplu de utilizare:
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
Instanțele oferă, de asemenea, următoarea metodă:
- collections._asdict() OrderedDict
Returnează numele câmpurilor și valorile lor sub forma unui
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Subclasă a tipului
dictcare reține și păstrează ordinea cheilor adăugate. Acceptă aceleași forme de constructor cadict(un iterabil de perechi(key, value), o altă mapare sau argumente cu cuvinte-cheie). Când un dicționar ordonat este iterat, cheile/elementele sunt returnate în ordinea în care au fost adăugate:from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
Rezultat:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Elimină și returnează o pereche (key, value) din dicționar. Perechile sunt returnate în ordine LIFO.
Diferență față de CPython
OrderedDict.popitem()nu acceptă argumentullast=Falseși va elimina și returna întotdeauna ultimul element, dacă există.O soluție de ocolire a acestui lucru este utilizarea
pop(<first_key>)pentru a elimina primul element:first_key = next(iter(d)) d.pop(first_key)