collections — типи колекцій та контейнерів¶
Цей модуль надає спеціалізовані контейнерні типи даних, що доповнюють вбудовані list, tuple, dict і set: двосторонню чергу (deque), фабрику іменованих кортежів (namedtuple()) та словник зі збереженням порядку ключів (OrderedDict).
Класи¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Deque (двостороння черга) — це контейнер, схожий на список, що підтримує операції додавання та видалення за O(1) з обох кінців. Нові deque створюються з такими аргументами:
iterable — ітерований об’єкт, що використовується для заповнення deque під час створення. Може бути порожнім кортежем або списком для створення початково порожньої черги.
maxlen є обов’язковим параметром, що обмежує максимальну довжину deque. Коли черга заповниться, нові елементи видалятимуть елементи з протилежного кінця.
Необов’язковий параметр flags може дорівнювати 1, щоб перевіряти переповнення при додаванні елементів.
Об’єкти Deque підтримують
bool,len(), ітерацію, а також завантаження та збереження за індексом. Вони також мають такі методи:- append(x: Any) None¶
Додає x до правого кінця deque. Якщо перевірку переповнення увімкнено і в черзі немає місця, виникає
IndexError.
- appendleft(x: Any) None¶
Додає x до лівого кінця deque. Якщо перевірку переповнення увімкнено і в черзі немає місця, виникає
IndexError.
- pop() Any¶
Видаляє та повертає елемент з правого кінця deque. Якщо елементів немає, виникає
IndexError.
- popleft() Any¶
Видаляє та повертає елемент з лівого кінця deque. Якщо елементів немає, виникає
IndexError.
- extend(iterable: Iterable) None¶
Розширює deque, додаючи всі елементи з iterable до правого кінця черги. Якщо перевірку переповнення увімкнено і в черзі немає місця, виникає
IndexError.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Це фабрична функція для створення нового типу namedtuple з заданою назвою та набором полів. namedtuple — це підклас tuple, що дозволяє звертатися до полів не лише за числовим індексом, але й через синтаксис атрибутів із символічними іменами полів. Fields — це послідовність рядків із назвами полів. Для сумісності з CPython це може бути рядок із назвами полів, розділеними пробілами (але це менш ефективно). Приклад використання:
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]
Екземпляри також надають такий метод:
- collections._asdict() OrderedDict
Повертає імена полів та їхні значення у вигляді
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Підклас
dict, що запам’ятовує та зберігає порядок доданих ключів. Приймає ті самі форми конструктора, що йdict(ітерований об’єкт із парами(key, value), інше відображення або іменовані аргументи). Під час ітерації по OrderedDict ключі/елементи повертаються у порядку їх додавання: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)
Виведення:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Видаляє та повертає пару (ключ, значення) зі словника. Пари повертаються у порядку LIFO.
Відмінність від CPython
OrderedDict.popitem()не підтримує аргументlast=Falseі завжди видаляє та повертає останній елемент, якщо він є.Обхідним рішенням є використання
pop(<first_key>)для видалення першого елемента:first_key = next(iter(d)) d.pop(first_key)