-1

リストがあります。作成するとすぐに、の結果print listは次のとおりです。

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

その後、引数として関数に渡されます。その関数の最初の行 (リストへの変更は行われていません) で、別の関数に渡されます。ここでリストを印刷すると、次のようになります。

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

繰り返しますが、これは他の作業が行われる前です。2 番目の関数は次のとおりです。

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]、ソースリストとしてこの数値リスト5、ターゲットとして int です。の最初の呼び出しはmedian()を返し72、続いて で呼び出された各短縮リストの中央値を返しbinarysearch()ます。最終的binarysearch()に True を返す必要があります。

4

1 に答える 1