Модуль collections в Python является частью стандартной библиотеки. Он предоставляет специализированные типы данных контейнеров, которые можно использовать в качестве альтернативы встроенным контейнерам общего назначения, таким как списки, кортежи и словари.
Эти специализированные контейнеры могут предлагать дополнительные функции и повышенную производительность для конкретных случаев использования.
Вот обзор некоторых из наиболее часто используемых типов данных контейнеров, предоставляемых модулем collections:
namedtuple
Именованные кортежи (namedtuple) — это расширение обычных кортежей, позволяющее обращаться к элементам по имени, а не только по индексу. Именованные кортежи могут сделать ваш код более читабельным и самодокументируемым.
|
1 2 3 4 5 6 7 |
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p.x) print(p.y) |
Выход
|
1 2 3 |
1 2 |
deque
Двусторонняя очередь (deque) — это структура данных, которая позволяет эффективно добавлять или удалять элементы с обоих концов. Это полезно при выполнении операций на обоих концах последовательности, например, при реализации очереди или стека.
|
1 2 3 4 5 6 7 8 |
from collections import deque d = deque([1, 2, 3]) d.append(4) d.appendleft(0) d.pop() d.popleft() print(d) |
Выход
|
1 2 |
deque([1, 2, 3]) |
Counter
Counter (счетчик) — это контейнер, похожий на словарь, который позволяет подсчитывать количество вхождений элементов в коллекцию. Это полезно, когда вам нужно выполнить такие операции, как подсчет частоты элементов в списке или поиск наиболее распространенных элементов.
|
1 2 3 4 5 |
from collections import Counter c = Counter(['a', 'b', 'a', 'c', 'a', 'b']) print(c) |
Выход
|
1 2 |
Counter({'a': 3, 'b': 2, 'c': 1}) |
OrderedDict
OrderedDict — это словарь, который поддерживает порядок элементов в зависимости от порядка их добавления. До Python 3.7 встроенный тип dict не гарантировал порядок, поэтому в таких случаях был полезен OrderedDict. С Python 3.7 сохранение порядка гарантируется и для встроенного словаря, поэтому потребность в OrderedDict уменьшилась.
defaultdict
defaultdict — это похожий на словарь контейнер, предоставляющий значение по умолчанию для несуществующего ключа. Он может упростить обработку отсутствующих ключей в определенных случаях использования, например при работе с графиками или подсчетом вхождений.
|
1 2 3 4 5 6 7 8 |
from collections import defaultdict d = defaultdict(int) # Default value for nonexistent keys is 0 d['a'] += 1 d['b'] += 1 d['a'] += 1 print(d) |
Чтобы использовать любой из этих контейнеров, вам необходимо импортировать их из модуля collections, как показано в примерах выше.
