collections — kolekce a kontejnerové typy¶
Tento modul poskytuje specializované kontejnerové datové typy, které doplňují vestavěné typy list, tuple, dict a set: oboustrannou frontu (deque), továrnu na n-tice s pojmenovanými poli (namedtuple()) a slovník zachovávající pořadí (OrderedDict).
Třídy¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Deque (oboustranné fronty) jsou kontejner podobný seznamu, který podporuje přidávání a odebírání prvků z obou konců fronty v čase O(1). Nové fronty deque se vytvářejí pomocí následujících argumentů:
iterable je iterovatelný objekt sloužící k naplnění fronty deque při jejím vytvoření. Může to být prázdná n-tice nebo seznam, čímž vznikne zpočátku prázdná fronta deque.
maxlen musí být zadán a fronta deque bude omezena na tuto maximální délku. Jakmile je fronta deque plná, jakékoli nově přidané prvky vyřadí prvky z opačného konce.
Volitelný argument flags může být 1, aby se při přidávání prvků kontrolovalo přetečení.
Objekty deque podporují
bool,len(), iteraci a čtení i zápis přes indexování. Mají také následující metody:- append(x: Any) None¶
Přidá x na pravý konec fronty deque. Vyvolá
IndexError, pokud je zapnuta kontrola přetečení a ve frontě již není místo.
- appendleft(x: Any) None¶
Přidá x na levý konec fronty deque. Vyvolá
IndexError, pokud je zapnuta kontrola přetečení a ve frontě již není místo.
- pop() Any¶
Odebere a vrátí prvek z pravého konce fronty deque. Vyvolá
IndexError, pokud nejsou přítomny žádné prvky.
- popleft() Any¶
Odebere a vrátí prvek z levého konce fronty deque. Vyvolá
IndexError, pokud nejsou přítomny žádné prvky.
- extend(iterable: Iterable) None¶
Rozšíří frontu deque přidáním všech prvků z iterable na pravý konec fronty deque. Vyvolá
IndexError, pokud je zapnuta kontrola přetečení a ve frontě deque již není místo.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Toto je továrna na vytvoření nového typu namedtuple s konkrétním názvem a sadou polí. Namedtuple je podtřída typu tuple, která umožňuje přistupovat k jeho polím nejen pomocí číselného indexu, ale také pomocí syntaxe přístupu k atributům s použitím symbolických názvů polí. Fields je posloupnost řetězců určujících názvy polí. Z důvodu kompatibility s CPythonem to může být také řetězec s názvy polí oddělenými mezerami (to je však méně efektivní). Příklad použití:
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 také poskytují následující metodu:
- collections._asdict() OrderedDict
Vrátí názvy polí a jejich hodnoty jako
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Podtřída typu
dict, která si pamatuje a zachovává pořadí přidávaných klíčů. Přijímá stejné formy konstruktoru jakodict(iterovatelný objekt dvojic(key, value), jiné mapování nebo klíčové argumenty). Při iteraci přes uspořádaný slovník se klíče/položky vracejí v pořadí, v jakém byly přidány: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)
Výstup:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Odebere a vrátí dvojici (klíč, hodnota) ze slovníku. Dvojice se vracejí v pořadí LIFO.
Rozdíl oproti CPythonu
OrderedDict.popitem()nepodporuje argumentlast=Falsea vždy odebere a vrátí poslední položku, pokud je přítomna.Řešením je použít
pop(<first_key>)k odebrání první položky:first_key = next(iter(d)) d.pop(first_key)