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 - Pygame 缩放 Sprite

python - 如何在 Flask 中通过 POST 请求发送图像

javascript - 数组极端情况下的二进制搜索

java - 通过二分查找递归帮助(Java)

c# - 在 C# 中使用列表进行二进制搜索

java - 自定义二分查找功能无法正常工作

python - 在 python 中使用 pyzmq 的日志处理程序

python:执行字典中的内容(命令)

python - 在没有 if 的循环中查找最大项

python - 在排序和旋转的数组中找到最小元素