のようなインデックスが存在する場合にのみ、文字列Sは文字列の部分文字列です。あなたが持っている空の文字列はいつなので、すべての結果は正しいです。TiT[i:i+len(S)] == SST[i:i] = '' = S
また、部分文字列が表示される最初のインデックスを返すT.index('')ため、0を返すことに注意してください。これは間違いなく正しい結果です。indexT[0:0] = ''
要約すると、空の文字列はすべての文字列の部分文字列であり、これらすべての結果はこの直接的な結果です。
また、文字列は文字列であり、それ自体が長さ 1 の文字列であるため、これは文字列特有のものであることに注意してください。他の種類のシーケンス ( lists やtuples など) の場合、同じ結果は得られません。
>>> (1,2,3).index(())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
>>> [1,2,3].index([1,2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: [1, 2] is not in list
>>> [] in [1,2,3]
False
これは、要素が任意の型になる可能性があるため、listメンバーtupleのみをチェックし、サブlistまたはサブをチェックしないためです。tupleケースを想像してみてください((1,2),1,2).index((1,2))。「サブタプルindex」をチェックする (したがって 1 を返す) か、メンバーをチェックする (したがって 0 を返す) か、いくつかの醜い混合 (たとえば、最初にサブタプルをチェックしてからメンバーをチェックする) を行う必要がありますか? Python では、メンバーのみを検索することにしました。これは、より単純であり、通常は必要なものであるためです。サブタプルのみをチェックすると、一般的なケースで非常に奇妙な結果が得られ、「混合」を行うと予測できない結果が生じることがよくあります。