У меня есть список ~ 30 поплавков. Я хочу посмотреть, есть ли в моем списке определенный float. Например:Python: более быстрые альтернативы поиску, если элемент находится в списке
1 >> # For the example below my list has integers, not floats
2 >> list_a = range(30)
3 >> 5.5 in list_a
False
4 >> 1 in list_a
True
Узкие в моем коде является строкой 3. Я поиск, если элемент находится в моем списке много раз, и я требую более быстрой альтернативы. Это узкое место занимает более 99% моего времени.
Я был в состоянии ускорить мой код, сделав list_a
набор вместо списка. Есть ли другие способы значительно ускорить эту линию?
Выполнение 'list' a' set' (один раз), а затем использование теста 'set' для членства - это стандартный способ ускорить это. Есть и другие вещи, которые могут помочь в некоторых случаях (деление пополам, если список отсортирован), но нет других «общих» решений. – mgilson
КПП. Вы уверены, что хотите проверить членство? Он проверяет равенство, и [математика с плавающей запятой, как известно, сломана] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken). –
Возможный дубликат [Самый эффективный способ поиска/поиска в огромном списке (python)] (http://stackoverflow.com/questions/2701173/most-efficient-way-for-a-lookup-search-in- a-огромный-list-python) –