2016-10-22 12 views
0

次のコードを見て、str.count('')メソッドとlen(str)関数が2つの異なる出力を与える理由を説明してください。str.count( '')とlen(str)の出力が異なるのはなぜですか?

a='' 
print(len(a)) 
print(a.count('')) 

出力:

0 
1 
+2

なぜ*同じ出力を与えるべきですか?空の文字列に空の文字列が1つあります。空の文字列の長さは0です。 –

+0

なぜ、a = '' <---(ここで私は2つのスペースを与えました)は2の長さの3つの空の文字列を与えていますか?返信いただきありがとうございます@MartijnPieters – liberal

+0

開始と最初のスペースの間に空の文字列があるため、最初のスペースと2番目のスペースの間にもう1つ、最後のスペースと最後のスペースの間に1つの最後のスペースがあります。 –

答えて

5

str.count()カウントストリングの非重複出現:

戻るサブサブの非重複出現数。

文字列''に部分文字列''がある場所があります。したがって、カウント return 1になります。

>>> (' ' * 100).count('') 
101 

空の文字列ためです:カウントは常に長さプラス1でなければなりませんので、一般的に言って、空の文字列は、で開始と終了時権利を含むすべての位置指定した文字列でを、一致します文字列のすべての文字の間に存在するとみなされます。したがって、ストリング長2の場合、3つの空のストリングがあります。 1つは開始時に、もう1つは2つの文字の間に、もう1つは最後に

はい、結果は異なり、完全に正しいです。

+3

「正確にそのような場所が1つあります部分文字列 ''は文字列 '':開始時に右に現れます。それを置くための正しい方法です。 CPythonは 'len(substr)== 0'と' len(str)+ 1'を返す特別なケースです(https://github.com/python/cpython/blob/master/Objects/stringlib/count .h#L16) –

+1

@ JimFasarakis-Hilliard:あなたが私の答えを完全に読んでいるかどうかはわかりませんが、コードが何をしているのか正確に言っています。 –

+2

空の文字列を渡したときに 'count()'が返すべきことは、私には明らかに分かりません。大会の問題をどのように数えるかは問題であり、このケースでは単に「ValueError」を投げるのが合理的だと思います。 「重複しない」とは、2つのオカレンスの共通部分が空の文字列であることを意味します。したがって、空の文字列がインデックス0に2回出現する場合、実際には重複しません。 –

関連する問題