Я использовал словарь в качестве таблицы поиска, но я начал задаваться вопросом, будет ли список лучше для моего приложения - количество записей в моей таблице поиска не было таким большим. Я знаю, что списки используют C-массивы под капотом, что заставило меня сделать вывод, что поиск в списке всего несколькими пунктами будет лучше, чем в словаре (доступ к нескольким элементам в массиве происходит быстрее, чем вычисление хэша).
Я решил рассказать об альтернативах, но результаты меня удивили. Поиск списков был лучше с помощью одного элемента! См. Следующий рисунок (график журнала):
Итак, возникает вопрос: Почему поиск списков выполняется так плохо? Что мне не хватает?
По второму вопросу что-то еще, что вызывало мое внимание, было небольшим "разрывом" в времени поиска dict после примерно 1000 записей. Я отобразил время поиска dict, чтобы показать его.
ps1 Я знаю об O (n) vs O (1) время амортизации для массивов и хэш-таблиц, но обычно бывает, что для небольшого числа элементов, итерации по массиву, лучше, чем использование хеш-таблицы.
p.s.2 Вот код, который я использовал для сравнения времени поиска dict и списка:
import timeit
lengths = [2 ** i for i in xrange(15)]
list_time = []
dict_time = []
for l in lengths:
list_time.append(timeit.timeit('%i in d' % (l/2), 'd=range(%i)' % l))
dict_time.append(timeit.timeit('%i in d' % (l/2),
'd=dict.fromkeys(range(%i))' % l))
print l, list_time[-1], dict_time[-1]
p.s.3 Использование Python 2.7.13