一尘不染

给定边界,找到间隔

algorithm

有这样的清单

[207, 357, 470, 497, 537]

其中每个数字表示的间隔(的边界0是在列表的开头隐含的),什么是 一pythonic的方法 找出哪个间隔的给定数目的n属于?

所以间隔是

0: (0, 207)
1: (208, 357)
2: (358, 497)
3: (498, 537)

如果n=0,那么相应的间隔0,对n=360,它是2


阅读 284

收藏
2020-07-28

共1个答案

一尘不染

当然使用bisect模块

>>> import bisect
>>> lst = [207, 357, 470, 497, 537]
>>> bisect.bisect_left(lst, 0)
0
>>> bisect.bisect_left(lst, 360)
2

该模块使用二进制搜索,这需要一个排序的序列。使用这样的序列,您可以通过在第一个和最后一个之间的中间位置选择一个索引来将序列分为两半,以查看所需的值是否在一半中。然后,您继续分割选定的一半,直到找到匹配的插入点。这样,您就可以在O(log
N)时间中找到长度为N(即非常快)的序列的插入点。

2020-07-28