いいえ、ありません。 is
演算子は、C最適化メソッドを維持して、Python APIに混乱を加えなければならないことを正当化するためにしばしば必要とされるものではありません。
リストとタプルのテストでは、any
(Cでもbtwでも同様)の完全な検索が行われます。ただし、テストでは、コンテナの基礎となる効率的な格納アルゴリズムが使用され、検索では予想される時間内に一定の時間がかかります。両方のセットとマッピングでは、キーは安定したハッシュを持つことになっています。ほとんどの場合、is
は必要ありません。
だから、正しいスペルは次のとおりです。
# For sequences
any(y is item for item in container)
# For sets, short circuit first for the not-present case:
# (note that you normally should not need this as you are supposed to rely on the hash)
y in setcontainer and any(y is item for item in setcontainer)
# For mappings, y is a key
y in mapping
# For mappings, y is a value, and you do not have a key, fall back to any
any(y is item for item in mapping.itervalues())
実際には、私は常にドキュメントの欠陥、それを考えられてきた方法 'list.index'と' list.count'などが効果に何かを言うこと」その値が* x *である最初の項目のリスト内のインデックスを返します。そのような項目がなければエラーです " – mgilson
しかし、セットでさえ、' in'はハッシュ値をチェックします。オブジェクトは区別されます。 'a =(1,2,3); c =(1,2,3); cはaであり; s =セット([a]); cである。現在、私はこれが重要な時を考えることはできません。 – mgilson
いいえ、ちょうどセットとディクテーションの 'の'演算子が* do * aスキャンを持っていないことを指摘してください。 –