2016-06-25 1 views
0

なぜ''はすべての文字列の部分文字列ですか?文字列インデックス0のあいまいさ

>>> string = 'string' 

>>> '' in string 
True 

なぜインデックスであるのですか0

>>> string.index('') 
0 

なぜインデックス0があいまいですか?

>>> string.index('s') 
0 

>>> string[string.index('')] 
's' 
+5

空のセットがすべてのセットのサブセットであるのと同じ理由からです。 –

+0

リスト(文字列) '' False'の '[]はなぜですか?結局 '[]'は空のセットです。 – SvbZ3r0

+2

@ SvbZ3r0: 'in'は文字列とは違って動作します。他のすべてのコンテナ型では、 'x in ctr'は' x'が 'ctr'の要素であるかどうかをテストし、 'x in a_string'は' x'が 'a_string'の部分文字列であるかどうかをテストします。 – jwodder

答えて

3
>>> string = 'string' 
>>> string[0:0] == '' 
True 
>>> string.index('str') 
0 
>>> string[string.index('str')] == 'str' 
False 

documentationstring.index(sub)がサブストリングの最初の発生を返すことを言うていますstring.index('')は、他のインデックスや特別な戻り値ではなく、0を返します。

+0

Ok。意味があります。しかし、なぜインデックス '0'を返しますか?空の部分文字列に対してすべてのインデックスが 'True'であるとは限りませんか? '' ''のインデックスにカスタムフラグを返す方が適切ではないでしょうか? – SvbZ3r0

+3

@ sVbZ3r0: 'index'は部分文字列が出現する最初のインデックスを返します。 '' strstr'.index( 'str') 'の特別な戻り値も得られません。 – Hurkyl

+0

右私はアホです!あなたの答えを更新すると私はそれを受け入れる – SvbZ3r0

2

string.index(部分文字列)は、部分文字列が始まるインデックス位置を返します。元の文字列の一部でない場合は-1を返します。

空の文字列はすべての文字列のサブセットです。つまり、すべての文字列は空の文字列で始まり、string.index( '')は文字列の最初のインデックスである0を返します。

列[指数]は空の文字列の開始インデックスによって返され、この場合0で、インデックス位置の文字を返し

+0

しかし、なぜそれが '0'ですか?存在しない場合には '-1'のようなカスタムの' empty substring'フラグを返した方が正確でしょうか? – SvbZ3r0

+0

これは、index()メソッドのパラメータが元の文字の部分文字列でない場合のフラグです。 –

関連する問題