在Python中,如何在排序列表中找到第一个值大于阈值的索引?

sta*_*tti 28 python algorithm search bisection

在Python中,如何在排序列表中找到第一个值大于阈值的索引?

我可以想到几种方法(线性搜索,手写二分法,......),但我正在寻找一种干净,合理有效的方法.由于它可能是一个非常常见的问题,我相信经验丰富的SOers可以提供帮助!

谢谢!

eum*_*iro 48

看看bisect.

import bisect

l = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

bisect.bisect(l, 55) # returns 7
Run Code Online (Sandbox Code Playgroud)

将其与线性搜索进行比较:

timeit bisect.bisect(l, 55)
# 375ns


timeit next((i for i,n in enumerate(l) if n > 55), len(l))
# 2.24us


timeit next((l.index(n) for n in l if n > 55), len(l))
# 1.93us
Run Code Online (Sandbox Code Playgroud)