Самый быстрый способ поиска списка в python

Когда вы делаете что-то вроде "test" in a где a является списком, выполняет ли python последовательный поиск в списке или создает ли представление хеш-таблицы для оптимизации поиска? В приложении мне это нужно, потому что я буду много искать в списке, так что лучше бы сделать что-то вроде b = set(a) а затем "test" in b ? Также обратите внимание, что список значений, которые у меня будут, не будет иметь повторяющихся данных, и я действительно не забочусь о том, в каком порядке он находится; Мне просто нужно проверить наличие ценности.

  • Поиск строки python
  • Поиск индексов совпадающих элементов в списке в Python
  • Покер ручная строка
  • Tweepy (Twitter API) Не возвращает все результаты поиска
  • Как искать интернет с Python?
  • Найти элемент в списке кортежей
  • Найти элемент в списке кортежей
  • Покер ручная строка
  • Какое лучшее приложение для поиска Django?
  • Преобразование системной команды в python для поиска и удаления файлов
  • Как найти все соответствия регулярному выражению в Python?
  • Как улучшить поиск с помощью os.walk и fnmatch
  • 4 Solutions collect form web for “Самый быстрый способ поиска списка в python”

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

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

    Я видел ускорение в 20 раз и выше по местам (в основном тяжелое число хруст), где один список был изменен для набора.

    "test" in a со списком a будет выполнять линейный поиск. Настройка хеш-таблицы на лету будет намного дороже, чем линейный поиск. "test" in b с другой стороны, сделает анимированный O (1) хэш-поиск.

    В случае, когда вы описываете, не существует причины использовать список по набору.

    Я думаю, было бы лучше пойти с установленной реализацией. Я знаю, что наборы имеют O (1) время поиска. Я думаю, что списки берут O (n) время поиска. Но даже если списки также относятся к O (1), вы ничего не теряете при переключении на наборы.

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

    Кажется, что список и кортежи имеют одинаковое время, а использование «in» медленнее для больших данных:

     >>> t = list(range(0, 1000000)) >>> a=time.time();x = [b in t for b in range(100234,101234)];print(time.time()-a) 1.66235494614 >>> t = tuple(range(0, 1000000)) >>> a=time.time();x = [b in t for b in range(100234,101234)];print(time.time()-a) 1.6594209671 

    Здесь гораздо лучшее решение: наиболее эффективный способ поиска / поиска в огромном списке (python)

    Это супер быстро:

     >>> from bisect import bisect_left >>> t = list(range(0, 1000000)) >>> a=time.time();x = [t[bisect_left(t,b)]==b for b in range(100234,101234)];print(time.time()-a) 0.0054759979248 
    Python - лучший язык программирования в мире.