Рубрики
Без рубрики

Структуры данных

Автор оригинала: Doug Hellmann.

Python включает несколько стандартных структур данных программирования, таких как list , tuple , dict и set , как часть его встроенные типы. Многие приложения не требуют других структур, но когда они нужны, стандартная библиотека предоставляет мощные и хорошо протестированные версии, готовые к использованию.

Модуль enum предоставляет реализацию типа перечисление с возможностями итерации и сравнения. Его можно использовать для создания четко определенных символов для значений вместо использования буквальных строк или целых чисел.

Модуль коллекций включает реализации нескольких структур данных, которые расширяют структуры других модулей. Например, Deque – это двусторонняя очередь, которая позволяет добавлять или удалять элементы с любого конца. defaultdict – это словарь, который возвращает значение по умолчанию, если ключ отсутствует, а OrderedDict запоминает последовательность, в которой к нему добавляются элементы. namedtuple расширяет обычный кортеж , чтобы дать каждому элементу-члену имя атрибута в дополнение к числовому индексу.

Для больших объемов данных массив может более эффективно использовать память, чем list . Поскольку array ограничен одним типом данных, он может использовать более компактное представление памяти, чем универсальный list . В то же время экземплярами array можно управлять, используя многие из тех же методов, что и list , поэтому можно будет заменить list с массивом в приложении без множества других изменений.

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

Другой вариант построения отсортированных списков или массивов – разделение пополам. Он использует двоичный поиск для поиска точки вставки для новых элементов и является альтернативой многократной сортировке списка, который часто изменяется.

Хотя встроенный list может имитировать очередь с помощью методов insert () и pop () , он не является потокобезопасным. Для истинного упорядоченного взаимодействия между потоками используйте модуль очереди. multiprocessing включает версию Queue , которая работает между процессами, что упрощает преобразование многопоточной программы для использования процессов.

struct полезна для декодирования данных из другого приложения, возможно, исходящих из двоичного файла или потока данных, в собственные типы Python для упрощения манипуляции.

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

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

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

  • enum – Тип перечисления
  • коллекции – Типы данных контейнера
  • array – Последовательность данных фиксированного типа
  • heapq – алгоритм сортировки кучи
  • bisect – поддерживать списки в отсортированном порядке
  • queue – Поточно-безопасная реализация FIFO
  • struct – структуры двоичных данных
  • weakref – Непостоянные ссылки на объекты
  • copy – повторяющиеся объекты
  • pprint – структуры данных Pretty-Print