Какой тип данных в Python использовать для реализации быстрой очереди вместо списка?

«Какой тип данных в Python использовать для реализации быстрой очереди вместо списка?» — вопрос из категории Алгоритмы, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для реализации эффективной очереди в Python следует использовать collections.deque вместо стандартного списка (list).

Почему deque лучше для очередей?

Основное преимущество deque — это высокая производительность операций добавления и удаления элементов с обоих концов. Эти операции имеют амортизированную сложность O(1).

В то же время, для списка (list) удаление элемента из начала (list.pop(0)) является медленной операцией со сложностью O(n), так как требует сдвига всех последующих элементов в памяти.

Пример использования deque:

from collections import deque

# Создание очереди
queue = deque(['a', 'b', 'c'])

# Добавление элемента в конец (enqueue)
queue.append('d')
# deque(['a', 'b', 'c', 'd'])

# Удаление элемента из начала (dequeue)
element = queue.popleft()
# element = 'a'
# queue = deque(['b', 'c', 'd'])

Техническое различие:

  • list: реализован как динамический массив.
  • deque (double-ended queue): реализован как двусвязный список указателей на блоки данных, что обеспечивает быструю вставку/удаление с обеих сторон.

Если вам нужна потокобезопасная очередь для многопоточных приложений, используйте класс queue.Queue.