在列表中查找下一个最接近的数字
我有一个清单:
lst = [100, 210, 330, 460, 600, 750, 910, 1080, 1260]
和一个给定的数字 470
我想找到它的两个最接近的数字之间的间隔的下一个上限......这会给出,600因为它是下一个最接近的数字。
如果是670我会得到750。
我有lst[min(range(len(lst)), key = lambda i: abs(lst[i]-K))]哪个给出壁橱编号,无论它是否是上限。
回答
您可以使用bisect.bisect_leftwhich 以对数时间为您提供最左边的插入索引(假设列表已排序,您的帖子似乎表明它是):
from bisect import bisect_left
A[bisect_left(A, 460)]
460
>>> A[bisect_left(A, 470)]
600
>>> A[bisect_left(A, 670)]
750
IndexError对于大于 的数字,这将引发1260。