У меня очень большой список, и мне нужно запустить много поисков для этого списка. Чтобы быть более конкретным, я работаю над большим текстовым файлом (> 11 Гб) для обработки, но есть элементы, которые появляются более одного раза, и я только обрабатываю их сначала, когда они появляются. Если шаблон появляется, я обрабатываю его и помещаю его в список. Если элемент появляется снова, я проверяю его в списке, и если это так, то я просто передать на обработку, например:Ускорить поиск элемента в списке (через Python)
[...]
if boundary.match(line):
if closedreg.match(logentry):
closedthreads.append(threadid)
elif threadid in closedthreads:
pass
else:
[...]
сам код далек от оптимального. Моя основная проблема заключается в том, что список «closedthreads» содержит несколько миллионов элементов, и вся операция только начинает замедляться и замедляться. Я думаю, что это может помочь сортировать список (или использовать объект отсортированного списка) после каждого append(), но я не уверен в этом. Какое самое элегантное решение?
Как уже указывалось в ответах, было бы полезно узнать больше о «threadid»: какой тип он есть, если значения каким-то образом ограничены ... в конце вам понадобится быстрый поиск, следовательно, хеширование и в некоторых случаях создание собственной хеш-функции может быть способом; знание домена помогает там. – mknecht
Threadid - простое целое число. (Я обрабатываю много файлов mysql_slow.log, чтобы повторно запускать их на серверах с воспроизведением percona. Чтобы ускорить процесс воспроизведения, мне нужно закрыть потоки, которые появляются последними в журналах. – banyek
Тогда принятый ответ, скорее всего, сделайте все правильно. Если у вас все еще есть проблемы с скоростью, тогда пришло время более внимательно рассмотреть эти цифры. Или, скорее, решить проблему по-другому. :) – mknecht