Реальный Python
3.8K subscribers
828 photos
10 videos
7 files
877 links
Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter
Download Telegram
🐍 Python Deque: Когда обычного списка недостаточно

Многие используют стандартный 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