20
Pythonでのバイナリ検索(二分)
リスト/タプルでバイナリ検索を実行し、見つかった場合はアイテムの位置を返し、見つからない場合は「False」(-1、なしなど)を返すライブラリ関数はありますか? bisectモジュールで関数bisect_left / rightを見つけましたが、アイテムがリストにない場合でも位置を返します。それは彼らの意図する使用法には完全に問題ありませんが、私はアイテムがリストにあるかどうかを知りたいだけです(何も挿入したくない)。 bisect_leftその位置にあるアイテムが私が検索しているものと等しいかどうかを使用して確認することを考えましたが、それは面倒に思われます(そして、番号がリスト内の最大の番号よりも大きくなる可能性があるかどうかも境界チェックを行う必要があります)。より良い方法がある場合、それについて知りたいのですが。 編集これが何のために必要なのかを明確にするために:辞書がこれに非常に適していることは承知していますが、メモリ消費量をできるだけ低く保つようにしています。私の使用目的は、一種の双方向ルックアップテーブルになります。テーブルに値のリストがあり、それらのインデックスに基づいて値にアクセスできるようにする必要があります。また、特定の値のインデックス、または値がリストにない場合はNoneを見つけられるようにしたいと思います。 これに辞書を使用するのが最も速い方法ですが、メモリ要件が(約)2倍になります。 私は、Pythonライブラリーで何かを見落とした可能性があると考えて、この質問をしていました。萌さんが示唆したように、自分でコードを書かなければならないようです。