为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2021-03-09 15:38:48
我有一个清单。创建后,结果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

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


查看完整回答
反对 回复 2021-03-27
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信