collections — tipovi kolekcija i spremnika¶
Ovaj modul pruža specijalizirane tipove podataka spremnika koji nadopunjuju ugrađene list, tuple, dict i set: dvostrani red (deque), tvornicu n-torki s imenovanim poljima (namedtuple()) i rječnik koji čuva redoslijed (OrderedDict).
Klase¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Redovi deque (dvostrani redovi) su spremnik nalik listi koji podržava O(1) dodavanja i uklanjanja s bilo koje strane reda. Novi redovi deque stvaraju se pomoću sljedećih argumenata:
iterable je iterabilni objekt koji se koristi za popunjavanje reda deque pri stvaranju. Može biti prazna n-torka ili lista za stvaranje reda koji je u početku prazan.
maxlen mora biti naveden i red deque bit će ograničen na tu maksimalnu duljinu. Kada je red pun, svaka nova dodana stavka odbacit će stavke sa suprotnog kraja.
Neobavezni flags može biti 1 za provjeru prekoračenja pri dodavanju stavki.
Objekti deque podržavaju
bool,len(), iteraciju te učitavanje i pohranu po indeksu. Imaju i sljedeće metode:- append(x: Any) None¶
Dodaje x na desnu stranu reda deque. Pokreće
IndexErrorako je provjera prekoračenja omogućena i u redu više nema mjesta.
- appendleft(x: Any) None¶
Dodaje x na lijevu stranu reda deque. Pokreće
IndexErrorako je provjera prekoračenja omogućena i u redu više nema mjesta.
- pop() Any¶
Uklanja i vraća stavku s desne strane reda deque. Pokreće
IndexErrorako nema prisutnih stavki.
- popleft() Any¶
Uklanja i vraća stavku s lijeve strane reda deque. Pokreće
IndexErrorako nema prisutnih stavki.
- extend(iterable: Iterable) None¶
Proširuje red deque dodavanjem svih stavki iz iterable na desnu stranu reda. Pokreće
IndexErrorako je provjera prekoračenja omogućena i u redu deque više nema mjesta.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Ovo je tvornička funkcija za stvaranje novog tipa namedtuple s određenim imenom i skupom polja. namedtuple je podklasa n-torke koja omogućuje pristup svojim poljima ne samo putem numeričkog indeksa, već i sintaksom pristupa atributima pomoću simboličkih imena polja. Polja su niz stringova koji određuju imena polja. Radi kompatibilnosti s CPythonom to također može biti string s imenima polja odvojenima razmacima (ali to je manje učinkovito). Primjer uporabe:
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]
Instance također pružaju sljedeću metodu:
- collections._asdict() OrderedDict
Vraća imena polja i njihove vrijednosti kao
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Podklasa tipa
dictkoja pamti i čuva redoslijed dodanih ključeva. Prihvaća iste oblike konstruktora kaodict(iterabilni objekt parova(key, value), drugo preslikavanje ili ključne argumente). Kada se iterira po uređenom rječniku, ključevi/stavke vraćaju se redoslijedom kojim su dodani: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)
Izlaz:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Uklanja i vraća par (key, value) iz rječnika. Parovi se vraćaju u LIFO redoslijedu.
Razlika u odnosu na CPython
OrderedDict.popitem()ne podržava argumentlast=Falsei uvijek će ukloniti i vratiti posljednju stavku ako postoji.Zaobilazno rješenje za to je korištenje
pop(<first_key>)za uklanjanje prve stavke:first_key = next(iter(d)) d.pop(first_key)