のようなインデックスが存在する場合にのみ、文字列S
は文字列の部分文字列です。あなたが持っている空の文字列はいつなので、すべての結果は正しいです。T
i
T[i:i+len(S)] == S
S
T[i:i] = '' = S
また、部分文字列が表示される最初のインデックスを返すT.index('')
ため、0を返すことに注意してください。これは間違いなく正しい結果です。index
T[0:0] = ''
要約すると、空の文字列はすべての文字列の部分文字列であり、これらすべての結果はこの直接的な結果です。
また、文字列は文字列であり、それ自体が長さ 1 の文字列であるため、これは文字列特有のものであることに注意してください。他の種類のシーケンス ( list
s やtuple
s など) の場合、同じ結果は得られません。
>>> (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 では、メンバーのみを検索することにしました。これは、より単純であり、通常は必要なものであるためです。サブタプルのみをチェックすると、一般的なケースで非常に奇妙な結果が得られ、「混合」を行うと予測できない結果が生じることがよくあります。