Вы можете получить лучшее время, чем метод перечисления / генератора, использующий itertools; Я думаю, что itertools обеспечивает более быструю реализацию базовых алгоритмов для разработчиков производительности во всех нас. Но пополам может быть еще быстрее.
from itertools import islice, dropwhile
threshold = 5
seq = [1,4,6,9,11]
first_val = islice(dropwhile(lambda x: x<=threshold, seq),0,1)
result = seq.index(first_val)
Я удивляюсь разнице между подходом, описанным здесь, и подходом, указанным для вашего вопроса в примерах документации, в отношении идиомы / скорости. Они показывают подход для нахождения значения, но усеченные до первой строки возвращают индекс. Я предполагаю, что поскольку он называется «bisect_right» вместо «bisect», он, вероятно, выглядит только в одном направлении. Учитывая, что ваш список отсортирован, и вы хотите больше, чем, это может быть наибольшей экономией поиска.
from bisect import bisect_right
def find_gt(a, x):
'Find leftmost value(switching this to index) greater than x'
return bisect_right(a, x)
Интересный вопрос.