我有一个清单。创建后,结果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 TrueEDIT2输入的一个示例是此数字列表[1, 3, 5, 60, 72, 83, 120, 180],作为源列表,将int5作为目标。median()然后应返回的第一个调用72,并随后返回每个被缩短的列表的中位数binarysearch()。最终binarysearch()应该返回True。
1 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
我查看了您的代码。并做了一些小的修改:
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
我不会修复您代码的每个方面,但这应该使您朝着正确的方向发展。祝你好运。
添加回答
举报
0/150
提交
取消