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

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

  • PermissionError: в python
  • Как я могу преобразовать абсолютно массивное число в строку за разумное время?
  • Использование событий с matplotlib в цикле for
  • Когда закрывать курсоры с помощью MySQLdb
  • Как я могу написать модульные тесты против кода, использующего matplotlib?
  • Heroku push отклонено, не удалось скомпилировать приложение Python / django (Python 2.7)
  • InsecurePlatformWarning: истинный объект SSLContext недоступен. Это не позволяет urllib3 правильно настроить SSL
  • Python с использованием метода basicConfig для входа в консоль и файл
  • 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 
    Interesting Posts

    Django After Midnight Business Hours Ошибка сравнения TimeField

    Воспроизведение mp3 с использованием Python, PyQt и Phonon

    С Bokeh, как сохранить в png или jpg вместо html-файла?

    Как получить доступ к полям в структуре, импортированной из файла .mat с помощью loadmat в Python?

    Массив Python доступен только для чтения, не может добавлять значения

    Найти объект в списке, который имеет атрибут, равный некоторому значению (которое соответствует любому условию)

    Предварительное выделение списка None

    Python: TypeError: объект «NoneType» не подлежит расшифровке

    Назначение Python's __repr__

    unicode и кодировка для персидского или арабского в python3

    Приоритет оператора присваивания Python – (a, b) = a = {}, 5

    Django ModelChoiceField позволяет создавать объекты

    Повторный запрос POST вызывает ошибку «socket.error: (99,« Невозможно назначить запрошенный адрес »)

    Построение нескольких трехмерных линий: преобразование данных

    Как отключить администратора Django в развернутом проекте, но сохранить его для локального развития?

    Python - лучший язык программирования в мире.