Шаг 129.
Python: тонкости программирования. Общие структуры данных Python. Очереди (с дисциплиной доступа FIFO). collections.deque - быстрые и надежные очереди

    На этом шаге мы рассмотрим особенности использования этого класса для организации очереди.

    Класс deque реализует очередь с двусторонним доступом, которая поддерживает добавление и удаление элементов с любого конца за O(1) (неамортизируемое) время. Поскольку двусторонние очереди одинаково хорошо поддерживают добавление и удаление элементов с любого конца, они могут служить в качестве очередей и в качестве стеков.


См. документацию Python "collections.deque": https://docs.python.org/3.6/library/collections.html#collections.deque.

    Объекты Python deque реализованы как двунаправленные связные списки (doubly-linked lists).


См. CPython "_collectionsmodule.c": https://github.com/python/cpython/blob/master/Modules/_collectionsmodule.c.

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

    Как результат, двусторонняя очередь collections.deque будет хорошим выбором, если вы ищете структуру данных очередь в стандартной библиотеке Python.

>>> from collections import deque
>>> q = deque()
>>> s.put('есть')
>>> s.put('спать')
>>> s.put('программировать')
>>> q
deque(['есть', 'спать', 'программировать'])
>>> q.popleft()
'есть'
>>> q.popleft()
'спать'
>>> q.popleft()
'программировать'
>>> q.popleft()
Traceback (most recent call last):
.   .   .   .
IndexError: pop from an empty deque

    На следующем шаге мы рассмотрим класс queue.Queue.




Предыдущий шаг Содержание Следующий шаг