collections — typy kolekcji i kontenerów¶
Ten moduł udostępnia wyspecjalizowane typy danych będące kontenerami, które uzupełniają wbudowane typy list, tuple, dict oraz set: dwustronną kolejkę (deque), fabrykę krotek z nazwanymi polami (namedtuple()) oraz słownik zachowujący kolejność (OrderedDict).
Klasy¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Kolejki dwustronne (deque) są kontenerem podobnym do listy, który obsługuje dodawanie i usuwanie elementów z dowolnej strony w czasie O(1). Nowe kolejki deque tworzy się przy użyciu następujących argumentów:
iterable to obiekt iterowalny używany do wypełnienia kolejki deque podczas jej tworzenia. Może to być pusta krotka lub lista, aby utworzyć początkowo pustą kolejkę deque.
maxlen musi zostać podany, a kolejka deque będzie ograniczona do tej maksymalnej długości. Gdy kolejka deque jest pełna, każdy nowo dodany element spowoduje usunięcie elementów z przeciwnego końca.
Opcjonalny argument flags może wynosić 1, aby sprawdzać przepełnienie podczas dodawania elementów.
Obiekty deque obsługują
bool,len(), iterację oraz odczyt i zapis przez indeksowanie. Posiadają również następujące metody:- append(x: Any) None¶
Dodaje x po prawej stronie kolejki deque. Zgłasza
IndexError, jeśli sprawdzanie przepełnienia jest włączone i w kolejce nie ma już miejsca.
- appendleft(x: Any) None¶
Dodaje x po lewej stronie kolejki deque. Zgłasza
IndexError, jeśli sprawdzanie przepełnienia jest włączone i w kolejce nie ma już miejsca.
- pop() Any¶
Usuwa i zwraca element z prawej strony kolejki deque. Zgłasza
IndexError, jeśli nie ma żadnych elementów.
- popleft() Any¶
Usuwa i zwraca element z lewej strony kolejki deque. Zgłasza
IndexError, jeśli nie ma żadnych elementów.
- extend(iterable: Iterable) None¶
Rozszerza kolejkę deque, dołączając wszystkie elementy z iterable po jej prawej stronie. Zgłasza
IndexError, jeśli sprawdzanie przepełnienia jest włączone i w kolejce deque nie ma już miejsca.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Jest to funkcja fabryczna tworząca nowy typ namedtuple o określonej nazwie i zestawie pól. Namedtuple jest podklasą tuple, która pozwala uzyskać dostęp do swoich pól nie tylko za pomocą indeksu liczbowego, ale również za pomocą składni dostępu do atrybutów przy użyciu symbolicznych nazw pól. Fields to sekwencja łańcuchów znaków określających nazwy pól. Dla zgodności z CPythonem może to być również łańcuch znaków z nazwami pól rozdzielonymi spacjami (ale jest to mniej wydajne). Przykład użycia:
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]
Instancje udostępniają również następującą metodę:
- collections._asdict() OrderedDict
Zwraca nazwy pól i ich wartości jako
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Podklasa typu
dict, która zapamiętuje i zachowuje kolejność dodawania kluczy. Akceptuje te same formy konstruktora codict(obiekt iterowalny par(key, value), inne mapowanie lub argumenty nazwane). Podczas iteracji po słowniku uporządkowanym klucze/elementy są zwracane w kolejności ich dodania: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)
Wynik:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Usuwa i zwraca parę (klucz, wartość) ze słownika. Pary są zwracane w kolejności LIFO.
Różnica względem CPythona
OrderedDict.popitem()nie obsługuje argumentulast=Falsei zawsze usunie oraz zwróci ostatni element, jeśli istnieje.Obejściem tego jest użycie
pop(<first_key>)w celu usunięcia pierwszego elementu:first_key = next(iter(d)) d.pop(first_key)