Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当传递给函数/列表索引超出范围时,列表获得额外元素_Python_List_Function - Fatal编程技术网

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

Python 当传递给函数/列表索引超出范围时,列表获得额外元素,python,list,function,Python,List,Function,我有一张单子。创建后,打印列表的结果是: [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:

我有一张单子。创建后,
打印列表的结果是:

[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]
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
一旦程序返回li[i]
,就会抛出以下错误: 索引器:列表索引超出范围

知道我做错了什么吗?我已尝试访问列表(0,1)的其他元素,但仍会抛出相同的错误

编辑: 第一个功能是:

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]
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
def二进制搜索(目标,搜索):
打印到搜索
i=中值(tosearch)
而(i!=目标):
如果我<目标:
del tosearch[i:len(tosearch)]
其他:
del-tosearch[0:i]
i=中值(tosearch)
返回真值
编辑2
一个示例输入是这个数字列表,
[1,3,5,60,72,83,120,180]
,作为源列表,int
5
作为目标。然后,第一次调用
median()
应该返回
72
,然后返回在
binarysearch()中调用的每个缩短列表的中值。最后,
binarysearch()
应该返回True。

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

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)


我不打算修复代码的每一个方面,但这应该会让您走上正确的方向。祝你好运。

你能给我们看一下第一个函数吗?
返回l[lenli/2-1]
应该是
返回li[lenli/2-1]
你离开
i
上的
i
。但这并不是你遇到问题的原因。你能给出一个输入示例,输出应该是什么吗?(向我们展示程序应有的流程)