41

inPythonでは、次のようにキーワードの効率はどのくらいですか。

a = [1, 2, 3]
if 4 in a:
  ...
4

2 に答える 2

55

リストの複雑さは次のとおりです。

O(n)

セットの場合は次のとおりです。

O(1)

http://wiki.python.org/moin/TimeComplexity

于 2012-10-15T23:39:33.223 に答える
42

右側のオペランドに依存します:

オペレーターinnot inコレクションメンバーシップのテスト。[...]コレクションメンバーシップテストは、伝統的にシーケンスにバインドされてきました。コレクションがシーケンスであり、そのオブジェクトと等しい要素が含まれている場合、オブジェクトはコレクションのメンバーです。ただし、他の多くのオブジェクトタイプが、シーケンスでなくてもメンバーシップテストをサポートすることは理にかなっています。特に、辞書(キー用)とセットはメンバーシップテストをサポートします。

クラスは、デフォルトの動作(シーケンスを繰り返す)をオーバーライドするための特別なメソッド__contains__を実装できるため、コンテナーのすべての要素を比較するよりも、メンバーシップをテストするためのより効率的な(またはより少ない)方法を提供できます。

メンバーシップテスト演算子(inおよびnot in)は、通常、シーケンスの反復として実装されます。ただし、コンテナオブジェクトは、オブジェクトがシーケンスである必要がない、より効率的な実装で次の特別なメソッドを提供できます。


あなたの例にはリストがあるので、それは繰り返され、一致が見つかるかリストが使い果たされるまで各要素が比較されます。時間計算量は通常O(n)です。

于 2012-10-15T23:42:08.810 に答える