繁体   English   中英

为什么显示我的列表索引超出范围

[英]Why display my list index out of range

我正在编码二进制搜索,我定义了一个函数,并有4个参数,其中一个参数number是您要搜索的数字,但是当我输入一个比列表的最后一个数字大的数字时,编译器将显示列表索引超出范围,数字和索引之间有什么联系?

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
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

我运行了这段代码,

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

我怀疑您得到的错误是因为您传递的数字是负数或大于数组的length-1,在其他情况下,您不会得到“索引超出范围”错误。

为什么要对答案投下反对票?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM