В последних двух историях мы рассмотрели несколько удобных функций Python для написания эффективного кода. В этом разделе мы рассмотрим коллекции Python, которые предлагают ряд интересных расширенных структур данных (помимо встроенных), которые вам понадобятся через какое-то время решать сложные проблемы.

Python предоставляет следующие встроенные структуры данных для обычной работы.

Список

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

Этот список является самым популярным и широко используемым DS в Python. Он сочетает мощь массивов (предоставляя нам иллюзию непрерывных ячеек памяти , тем самым обеспечивая произвольный доступ) и связанных списков (динамический размер и неоднородность) и представляет гибридную DS, которая сочетает в себе «лучшее из обоих».

Кортеж

Почти идентичен списку, за исключением одной особенности. Он неизменяем. (Мы можем добавлять элементы только во время его создания, а не позже).

Установить

неупорядоченныйнабор элементов. Уникальный(наборы не могут содержать повторяющиеся элементы, такие как списки и кортежи). Изменяемый. Постоянное время поиска(Наборы используют хэш-карты для хранения данных, и они обеспечивают почти постоянное время поиска O(1)).

Словари

неупорядоченныйнабор пар ключ-значение.уникальные ключи. Изменяемый. Популярная DS для хранения данных в форме «пара ключ-значение» и получения постоянного поиска на основе ключа.

В большинстве ваших обычных случаев использования ваши потребности будут удовлетворены с помощью этих DS. Python предоставляет дополнительный модуль Collection с несколькими расширенными структурами данных, которые можно использовать в более конкретных случаях.

Примечание. Эти DS не являются частью встроенной области. Вам придется импортировать их из модуля «Коллекции», чтобы использовать их.

Прилавок

Это очень интересный и полезный DS. Он принимает любую итерацию, подсчитывает частоту присутствующих в ней элементов и возвращает словарь пар элемент-частота.

Это полезно, когда наш вариант использования имеет дело с частотой элементов, как показано в этом примере игры в покер.

NamedTuple

Поскольку кортежи неизменяемы, большая часть обмена информацией только для чтения происходит через кортежи. Основным недостатком кортежей является то, что для извлечения информации нам нужно использовать индекс, который не передает никакого значения информации, помещенной в эту позицию.

Именованные кортежи являются расширениями кортежей, где элементы из кортежей могут быть извлечены с использованием соответствующих имен.

OrderedDict

Они ничем не отличаются от обычных словарей, за исключением одного отличия: они запоминают порядок добавления элементов в него. Например, предположим, что мы хотим сохранить очки игрока с битой в недавнем матче ODI, мы сохраним его как имя игрока с битой против счета, но для сохранения позиции, в которой он бил, мы будем использовать упорядоченный словарь как в отличие от обычного словаря.

Примечание. Начиная с Python 3.7, обычные словари начали запоминать порядок вставки элементов, поэтому, когда эта версия Python получит широкое распространение, потребность в упорядоченном наборе словарей исчезнет.

Значение по умолчанию

Если мы попытаемся получить доступ к какому-либо ключу из несуществующего словаря, возникнет исключение KeyError, которое нам придется обрабатывать в нашем коде.

В противном случае нам нужно сначала проверить, существует ли «ключ» в словаре, используя оператор «in», прежде чем обращаться к какому-либо значению. Это может быть немного раздражающей задачей, особенно когда нам приходилось делать это для всех обращений к словарю.

Словарь по умолчанию решает эту проблему, возвращая значение по умолчанию, если ключ не существует. Это упрощает заботы звонящего.

Дек

Стеки и очередь — это фундаментальные DS, которые можно легко построить поверх легкодоступных встроенных DS.

В Python мы можем легко рассматриватьсписок как стек с его методами Push и Pop и индексом -1 для поиска верхнего элемента. По соглашению вы также можете обращаться со списком как с очередью, но предпочтительнее использовать для этой цели модуль стандартной библиотеки Queue, который держит все в порядке.

В модуле «Коллекции» Python предоставляет Deque, который представляет собой двустороннюю очередь для конкретных случаев использования (популярным является вариант использования скользящего окна).

Вам не понадобятся эти расширенные DS для обычной работы, но хорошо знать, что они существуют, чтобы вы могли использовать их, если они сочтут нужным для вашей задачи. Удачного кодирования!!