1

リストに 1 がある場合は結果が 1 になり、それ以外の場合は 0 になるように、すべてゼロまたは 1 を含むリストの要素を合計する必要があります。

def binary_search(l, low=0,high=-1):
    if not l: return -1
    if(high == -1): high = len(l)-1
    if low == high:
        if l[low] == 1: return low
        else: return -1
    mid = (low + high)//2
    upper = [l[mid:high]]
    lower = [l[0:mid-1]]
    u = sum(int(x) for x in upper)
    lo = sum(int(x) for x in lower)
    if u == 1: return binary_search(upper, mid, high)
    elif lo == 1: return binary_search(lower, low, mid-1)
    return -1

 l = [0 for x in range(255)]
 l[123] = 1
 binary_search(l)

テストに使用しているコード

u = sum(int(x) for x in upper)

インタープリターでは正常に動作しますが、エラーが発生します

TypeError: int() 引数は、'list' ではなく、文字列または数値でなければなりません

Python を使い始めたばかりで、何が問題なのかわかりません (私が C++ で書いたバージョンも動作しません)。

誰にも指針がありますか?

また、単純な10進数の加算ではなく、2進数のxorになるように合計するにはどうすればよいですか?

4

4 に答える 4

2

リストに 1 がある場合は結果が 1 になり、それ以外の場合は 0 になるように、すべてゼロまたは 1 を含むリストの要素を合計する必要があります。

リスト全体を合計する必要はありません。最初の 1 で停止できます。単純に を使用しますany()Trueコンテナに真の値が少なくとも 1 つある場合は戻りますが、Falseそうでない場合は短絡します (つまり、リストの早い段階で真の値が見つかった場合、残りはスキャンしません)。便利なことに、1 は真であり、0 はそうではありません。

True算術コンテキストでは 1とFalse0 として機能しますが (ブール値は整数のサブクラスです)、特に 1 と 0 が必要な場合はany()int().

于 2013-07-01T16:05:07.193 に答える