python - 如何对相同值的范围进行二分查找?

标签 python binary-search

我有一个排序的数字列表,我需要让它返回数字出现的索引范围。我的 list 是:

daysSick = [0, 0, 0, 0, 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 6, 11, 15, 24]

如果我搜索了 0,我需要返回 (0, 3)。现在我只能得到它来找到一个号码的位置!我知道如何进行二进制搜索,但我不知道如何让它从该位置上下移动以找到其他相同的值!

low = 0
high = len(daysSick) - 1
while low <= high :
    mid = (low + high) // 2
    if value < daysSick[mid]:
        high = mid - 1
    elif value > list[mid]:
        low = mid + 1
    else:
        return mid

最佳答案

你为什么不使用python's bisection routines :

>>> daysSick = [0, 0, 0, 0, 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 6, 11, 15, 24]
>>> from bisect import bisect_left, bisect_right
>>> bisect_left(daysSick, 3)
6
>>> bisect_right(daysSick, 3)
9
>>> daysSick[6:9]
[3, 3, 3]

关于python - 如何对相同值的范围进行二分查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30794533/

相关文章:

python - 打印跳过换行

python - 苹果操作系统 : unable to use virtualenv

java - java contains() 方法使用什么算法?

python - 在 Google 翻译中使用 BeautifulSoup4

python - 隐藏的字典键

python - 如何将numpy Array 转换为tensorflow 可以分类的数据类型?

python - 为什么向对分函数添加 `reversed` 参数被认为效率低下?

java - 来自已排序数组的 X 的 floor 和 ceil

c - 在C中对字符串数组进行二进制搜索

c++ - 二进制搜索程序无法识别边界?