のpython3の範囲オブジェクトはO(1)封じ込めだから1は15 in range(3, 19, 2)
を行うと、正しい答えにTrue
なぜPython3のレンジ/スライスオブジェクトは、他のレンジ/スライスの包含テストをサポートしていませんか?
のチェックをサポートするしかし、それはW/B二つの範囲をチェック封じ込めをサポートしていません
a = range(0, 10)
b = range(3, 7)
a in b # False
b in a # False, even though every element in b is also in a
a < b # TypeError: '<' not supported between instances of 'range' and 'range'
それはとして解釈さb in a
範囲内の任意の要素「」等しいオブジェクトに「B」であると思われますか?
ただし、範囲には整数以外は使用できないため、range(...) in range(...)
は常にFalse
を返します。 IMHOでは、範囲 'a'の範囲 'b'のすべての要素はであるため、このようなクエリには回答する必要がありますか?この範囲には開始、終了、ステップ、および長さだけが格納されていると仮定すると、このクエリはO(1)でも応答できます。
スライスオブジェクトも役に立ちません。それは__contains__
メソッドを実装していない、と(意味をなさない)__lt__
方法単にcompares two slices as tuples
があり、これらの現在の実装の背後にある理由です、またはそれだけで「それがこの方法を実装するために起こった」ありますもの?
範囲はコンテナではなく、整数範囲のみを表すシーケンスです。繰り返し可能ですが、そこから要素を削除することはできません。したがって、非数値型の包含を検査することは依然として可能です。しかし、あなたは正しいです、それは多くの混乱を招き、賛否両論は賛否を上回ります。 –