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

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

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


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

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


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

    В целом двусторонняя очередь collections.deque - отличный выбор, если вы ищете стековую структуру данных в стандартной библиотеке Python, которая обладает характеристиками производительности, аналогичными реализации на основе связного списка.

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

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




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