in
Pythonでは、次のようにキーワードの効率はどのくらいですか。
a = [1, 2, 3]
if 4 in a:
...
in
Pythonでは、次のようにキーワードの効率はどのくらいですか。
a = [1, 2, 3]
if 4 in a:
...
右側のオペランドに依存します:
オペレーター
in
とnot in
コレクションメンバーシップのテスト。[...]コレクションメンバーシップテストは、伝統的にシーケンスにバインドされてきました。コレクションがシーケンスであり、そのオブジェクトと等しい要素が含まれている場合、オブジェクトはコレクションのメンバーです。ただし、他の多くのオブジェクトタイプが、シーケンスでなくてもメンバーシップテストをサポートすることは理にかなっています。特に、辞書(キー用)とセットはメンバーシップテストをサポートします。
クラスは、デフォルトの動作(シーケンスを繰り返す)をオーバーライドするための特別なメソッド__contains__
を実装できるため、コンテナーのすべての要素を比較するよりも、メンバーシップをテストするためのより効率的な(またはより少ない)方法を提供できます。
メンバーシップテスト演算子(
in
およびnot in
)は、通常、シーケンスの反復として実装されます。ただし、コンテナオブジェクトは、オブジェクトがシーケンスである必要がない、より効率的な実装で次の特別なメソッドを提供できます。
あなたの例にはリストがあるので、それは繰り返され、一致が見つかるかリストが使い果たされるまで各要素が比較されます。時間計算量は通常O(n)
です。