0

エラーはラインで発生します if data[l][0] == value:

def binary_pairs(data, value):
    l = 0
    h = len(data) - 1
    while l < h and data[l]!= value:
        m = (h + l) // 2
        if data[m][0] == value:
            l = m
        elif data[m][0] < value:
            l = m + 1
        else:
            h = m - 1
    print("done")
    if data[l][0] == value:
        return l
    else:
        return -1

入力例: [ [ "dead", ["brian.txt","grail.txt"] ], [ "eunt", ["brian.txt"] ], [ "spank", ["grail.txt"] ] ]

4

2 に答える 2

1

あなたのコードには 2 つの潜在的な問題があることがわかります。

  • data[l]と の両方をdata[l][0]比較で使用するのは奇妙に思えます。

  • たとえば、l==0andで( )h==1を取ると、範囲外の になります。他にも同様の問題がある可能性があります。elseh = m - 1h==-1

于 2013-09-15T18:26:56.080 に答える
0

あなたのコードを今すぐ実行することはできませんが、ここにいくつかのアイデアがあります。

  • 二分探索の書き方を学ぼうとするのではなく、問題を解決しようとしている場合は、Python のbisectモジュールの使用を検討してください。

http://docs.python.org/2/library/bisect.html

  • Python では、PEP 8 と呼ばれるコーディング標準に準拠することがベスト プラクティスです。これは、変数名として小文字の L や大文字の I を使用しないことを推奨します。

http://www.python.org/dev/peps/pep-0008/

  • 値がまだ見つからないことを確認するループ テストを一番上に置いて、ループを終了させ、値を関数の一番下から返されます。ループが終了すると、関数の最後で戻ることができ-1ます。

  • ループは< hインデックスが I であることを確認しますが、インデックスが I であることを確認しません>= 0。これがあなたの問題かもしれないと思います。

  • このようなループをデバッグする場合、何が起こっているかをログに記録する print ステートメントを追加すると役立つことがよくあります。インデックスの値を出力し、他の行を十分に出力して、それが増加しているか減少しているか、およびどれだけ減少しているかを確認する必要があります。

于 2013-09-15T18:45:04.537 に答える