我有一个排序的数字列表,我需要让它返回数字出现的索引范围。我的 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/