🐍 Python Deque: Когда обычного списка недостаточно
Многие используют стандартный
Здесь на сцену выходит
🚀 Почему Deque круче списка в определенных задачах?
Главная проблема
🔹
🔹Возможность создания кольцевых буферов (ограниченных очередей).
🔹Потокобезопасность для атомарных операций добавления/удаления.
🛠 Примеры использования
💡 Когда стоит использовать
🔹Реализация очередей (FIFO) и стеков (LIFO).
🔹Алгоритмы обхода графов (BFS - поиск в ширину).
🔹Хранение последних логов или сообщений.
📖 Подробнее в статье: https://realpython.com/python-deque/
#python #tips #collections #backend
👉 @python_real
Многие используют стандартный
list для любых задач, связанных с хранением последовательностей. Но что, если вам нужно эффективно добавлять или удалять элементы с обоих концов структуры?Здесь на сцену выходит
collections.deque (double-ended queue).🚀 Почему Deque круче списка в определенных задачах?
Главная проблема
list в том, что он оптимизирован для операций с правой стороны. Удаление или вставка в начало списка (list.insert(0, v) или list.pop(0)) заставляет Python сдвигать все остальные элементы, что дает сложность .deque обеспечивает:🔹
O(1) для операций добавления/удаления как слева, так и справа.🔹Возможность создания кольцевых буферов (ограниченных очередей).
🔹Потокобезопасность для атомарных операций добавления/удаления.
🛠 Примеры использования
from collections import deque
# 1. Создаем дек
d = deque(['middle'])
# 2. Добавляем элементы с двух сторон
d.append('right') # в конец
d.appendleft('left') # в начало
print(d) # deque(['left', 'middle', 'right'])
# 3. Удаляем элементы
d.pop()
d.popleft()
# 4. Ограниченная очередь (самое полезное!)
# Хранит только последние 3 элемента. Идеально для логов или истории.
history = deque(maxlen=3)
for i in range(5):
history.append(f"Action {i}")
print(history)
# Результат: всегда только последние 3 действия
💡 Когда стоит использовать
deque?🔹Реализация очередей (FIFO) и стеков (LIFO).
🔹Алгоритмы обхода графов (BFS - поиск в ширину).
🔹Хранение последних логов или сообщений.
Важный нюанс: Доступ к элементам по индексу в середине дека (d[n]) работает медленнее(O(n)), чем в списке(O(1)). Если вам нужен частый произвольный доступ - оставайтесь наlist.
📖 Подробнее в статье: https://realpython.com/python-deque/
#python #tips #collections #backend
👉 @python_real
👍3