można dostać lepszego czasu niż wyliczyć podejścia generatora/Korzystanie itertools; Myślę, że itertools zapewnia szybsze implementacje podstawowych algorytmów, dla twórców wydajności w każdym z nas. Ale bisect może być jeszcze szybszy.
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)
Zastanawiam się o różnicy między podejściem przepoławiać pokazanej tu i wymieniony na swoje pytanie w przykładach doc miarę idiom/prędkości. Pokazują one podejście do znalezienia wartości, ale obcięte do pierwszej linii, zwracają indeks. Domyślam się, że skoro nazywa się "bisect_right" zamiast "bisect", prawdopodobnie patrzy tylko z jednego kierunku. Biorąc pod uwagę, że twoja lista jest posortowana i chcesz większej niż ta, może to być największa gospodarka wyszukiwania.
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)
Interesujące pytanie.
Drugi byłby szybszy bez wyliczenia, używając prostej pętli i zwracając listę list.index(). Ale nigdzie w pobliżu rozwiązania dwudzielnego. – rplnt
@rplnt - dziękuję, dodałem to do porównania. Masz rację, jest to szybsze niż wyliczenie. – eumiro