Какие знаешь структуры данных из модуля collections в Python?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Структуры данных модуля collections в Python
Модуль collections предоставляет специализированные контейнеры данных, которые расширяют функциональность встроенных типов Python. Это критически важно для написания эффективного и понятного кода.
namedtuple
Иммутабельный кортеж с именованными полями. Идеален для представления простых структур данных без чрезмерной сложности.
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x) # 10
print(p[0]) # 10 — можно обращаться как к кортежу
deque
Двусторонняя очередь с O(1) операциями добавления и удаления элементов с обоих концов. Намного эффективнее списка для операций в начале.
from collections import deque
dq = deque([1, 2, 3])
dq.appendleft(0) # [0, 1, 2, 3]
dq.pop() # 3
dq.popleft() # 0
Counter
Специализированный словарь для подсчёта количества элементов. Очень полезен для анализа данных и работы с частотностью.
from collections import Counter
data = ["a", "b", "a", "c", "b", "a"]
c = Counter(data)
print(c) # Counter({"a": 3, "b": 2, "c": 1})
print(c.most_common(2)) # [("a", 3), ("b", 2)]
defaultdict
Словарь с дефолтным значением для несуществующих ключей. Избегаешь проверок if key in dict и KeyError.
from collections import defaultdict
g = defaultdict(list)
g["key1"].append("value1")
print(g["key1"]) # ["value1"]
print(g["key2"]) # [] — автоматически создаётся пустой список
OrderedDict
Словарь, который запоминает порядок вставки элементов. В Python 3.7+ обычный dict уже сохраняет порядок, но OrderedDict имеет дополнительные методы как move_to_end().
from collections import OrderedDict
od = OrderedDict()
od["first"] = 1
od["second"] = 2
od.move_to_end("first") # Перемещает "first" в конец
ChainMap
Объединяет несколько словарей в один логический. Полезен для работы с конфигурациями и приоритизацией источников данных.
from collections import ChainMap
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "a": 100}
chained = ChainMap(dict1, dict2)
print(chained["a"]) # 1 — берёт из первого словаря
Практические применения
- deque — реализация очередей и стеков
- Counter — анализ текстов, подсчёт частотности
- defaultdict — группировка данных по ключам
- namedtuple — замена простых классов данных
- ChainMap — управление конфигурациями с fallback
Эти структуры повышают читаемость кода и оптимизируют производительность под конкретные задачи.