-1

我有一个清单。一旦我创建它,结果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: list index out of range

任何想法我做错了什么?我尝试访问列表 (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]的 int 。5然后第一次调用median()应该返回72,然后是每个缩短列表的中值,因为它被调用binarysearch()。最终binarysearch()应该返回 True。

4

1 回答 1

1

我检查了你的代码。并做了一些小的修改:

def median(li):
    if not len(li)%2:
        i = (((len(li)/2) + (len(li)/2 + 1)) / 2)
        return i, li[i]
    else:
        return i, li[len(li)/2 - 1]

def binarysearch(target, tosearch):    
    while True:
        idx, med = median(tosearch)
        if med == target:
            return True
        elif med < target:
            tosearch = tosearch[idx:]
        elif med > target:
            tosearch = tosearch[:idx]

l = [1, 3, 5, 60, 72, 83, 120, 180]
print binarysearch(5, l)

结果是:

>>>
True

我不会修复您代码的每个方面,但这应该会让您朝着正确的方向前进。祝你好运。

于 2013-05-27T10:05:15.727 回答