Встроенные возможности Python

vstroennye vozmozhnosti python Структуры данных

В данном случае Python также поддерживает операции поиска с помощью встроенных инструментов. Словари, например, предоставляют оптимизированные инструменты поиска по таблицам, реализованные на языке C. Встроенная операция доступа к элементам словаря по ключу, вероятнее всего, будет выполняться быстрее, чем эквивалентная реализация поиска на языке Python:

>   >> x = {} # пустой словарь

>   >> for i in [3, 1, 9, 2, 7]: x[i] = None # вставка

>>> x

{7: None, 1: None, 2: None, 3: None, 9: None}

>>> 

>   >> for i in range(8): print((i, i in x), end=’ ‘) # просмотр

(0,False) (1,True) (2,True) (3,True) (4,False) (5,False) (6,False) (7,True)

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

>   >> x = set() # пустое множество

>   >> for i in [3, 1, 9, 2, 7]: x.add(i) # вставка

>>> x

{7, 1, 2, 3, 9}

>   >> for i in range(8): print((i, i in x), end=’ ‘) # просмотр

(0,False) (1,True) (2,True) (3,True) (4,False) (5,False) (6,False) (7,True)

Существует множество способов добавления элементов в множества и словари — оба типа удобно использовать для проверки наличия ключа, но словари дополнительно позволяют присваивать значения ключам:

>   >> v = [3, 1, 9]

подпись: >>> {k for k in v}# генератор множеств

{1, >>> {1,

3, 9} set(v)

3, 9}

#

конструктор множества

>>> {1:

{k: k+100 for k in v} 101, 3: 103, 9: 109}

#

генератор словарей

>>> {1:

dict(zip(v, [99] * len(v))) 99, 3: 99, 9: 99}

#

конструктор словаря

>>> {1:

dict.fromkeys(v, 99)

99, 3: 99, 9: 99}

#

метод словаря

 

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

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий