我正在编码二进制搜索,我定义了一个函数,并且有4个参数,其中一个参数是数字是你要搜索的数字,但是当我 输入一个大于最后一个列表数的大数,编译器会显示列表索引超出范围,数字和索引之间的连接是什么?
list = [2, 3, 4, 6, 8, 9, 10, 11, 20]
mid = len(list) / 2
left = 0
right = len(list)
def searchNumber(left, right, number, mid):
while left <= right:
mid = (right - left) / 2 + left
if list[mid] == number:
print("the local is in %d" % (mid))
return mid
break
elif list[mid] > number:
right = mid - 1
else:
left = mid + 1
答案 0 :(得分:0)
{{1}}
答案 1 :(得分:-1)
我运行了这段代码,
list = [2, 3, 4, 6, 8, 9, 10, 11, 20]
mid = len(list) / 2
left = 0
right = len(list)
def searchNumber(left, right, number, mid):
while left <= right:
mid = (right - left) / 2 + left
if list[mid] == number:
print("the local is in %d" % (mid))
return mid
break
elif list[mid] > number:
right = mid - 1
else:
left = mid + 1
return None
a = searchNumber(0, len(list)-1, 40, 40)
print "a =" + str(a)
b = searchNumber(0, len(list)-1, 9, 5)
print "b =" + str(b)
在这两种情况下我都得到了正确的输出,其中询问的号码存在且请求号码大于列表的最大号码。
$ python pyt.py
a = None
the local is in 5
b = 5
我怀疑你得到的错误是因为你传递的数字是负数或大于数组的长度-1,我没有看到任何其他你得到的情况&# 34;指数超出范围&#34;错误。
为什么DOWN投票给答案?