当传递给函数/列表索引超出范围时,列表获得额外的元素

我有一个清单。创建后,结果print list是:


[1, 3, 5, 60, 72, 83, 120, 180]

然后将其作为参数传递给函数。在该函数的第一行(未对列表进行任何更改),它将传递给另一个函数。在此处打印列表将产生以下结果:


[1, 3, 5, 60, 72, 83, 120, 180]

[]

同样,这是在做其他任何事情之前。第二个功能是:


def median(li):

    print li

    lenli = len(li)

    if lenli%2==0:

        i = (((lenli/2) + (lenli/2 + 1)) / 2)

        print i

        return li[i]

    else:

        return l[lenli/2 - 1]

程序进入后return li[i],将引发以下错误:IndexError:列表索引超出范围


有什么想法我做错了吗?我尝试访问列表(0,1)的其他元素,但仍然抛出相同的错误。


编辑:第一个功能是:


def binarysearch(target, tosearch):

    print tosearch

    i = median(tosearch)

    while(i != target):

        if i < target:

            del tosearch[i:len(tosearch)]

        else:

            del tosearch[0:i]

        i = median(tosearch)

    return True

EDIT2输入的一个示例是此数字列表[1, 3, 5, 60, 72, 83, 120, 180],作为源列表,将int5作为目标。median()然后应返回的第一个调用72,并随后返回每个被缩短的列表的中位数binarysearch()。最终binarysearch()应该返回True。


慕尼黑8549860
浏览 127回答 1
1回答

慕雪6442864

我查看了您的代码。并做了一些小的修改:def median(li):&nbsp; &nbsp; if not len(li)%2:&nbsp; &nbsp; &nbsp; &nbsp; i = (((len(li)/2) + (len(li)/2 + 1)) / 2)&nbsp; &nbsp; &nbsp; &nbsp; return i, li[i]&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; return i, li[len(li)/2 - 1]def binarysearch(target, tosearch):&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; while True:&nbsp; &nbsp; &nbsp; &nbsp; idx, med = median(tosearch)&nbsp; &nbsp; &nbsp; &nbsp; if med == target:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return True&nbsp; &nbsp; &nbsp; &nbsp; elif med < target:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tosearch = tosearch[idx:]&nbsp; &nbsp; &nbsp; &nbsp; elif med > target:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tosearch = tosearch[:idx]l = [1, 3, 5, 60, 72, 83, 120, 180]print binarysearch(5, l)结果是:>>>True我不会修复您代码的每个方面,但这应该使您朝着正确的方向发展。祝你好运。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python