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

时间:2017-05-02 07:08:40

标签: python

我正在编码二进制搜索,我定义了一个函数,并且有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

2 个答案:

答案 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投票给答案?