web-dev-qa-db-ja.com

「www」.count(「ww」)が2ではなく1を返すのはなぜですか?

私のコードでは:

_>> s = 'abacaba'
>> s.count('aba')
>> 2
_

上記のコードでは、文字列sで 'aba'が2回発生するため、正しい答えが得られます。

ただし、次の場合:

_>> s = 'www'
>> s.count('ww')
>> 1
_

この場合、s.count('ww')が_2_を返すことを期待しています。ただし、_1_を返します。

どうして?

40
cjahangir

docs を読んでください:

文字列s[start:end]のサブストリングsubの(non-overlapping)出現回数を返します。負の値の開始と終了および解釈のデフォルトは、スライスの場合と同じです。

「ww」は最初に一致するため、3番目の「w」から先に進み、「ww」との一致に失敗します。

165
Maroun

string.count(s, sub[, start[, end]])

文字列s [start:end]の部分文字列subの(重複しない)の出現回数を返します。負の値の開始と終了および解釈のデフォルトは、スライスの場合と同じです。

ソース: https://docs.python.org/2/library/string.html

34
mutilis

次のように考えてみてください。

この単語では、「アバカバ」、いくつの非重複「アバ」という単語が表示されますか? 2が表示されます。「c」も表示されます。

この言葉で:「www」はいくつ重複しない「ww」という言葉が表示されますか? 1が表示されます。「w」も表示されます。

より良い説明については、表示されたときにインスタンスを削除していると考えてください。

「abacaba」の場合、「aba」が表示されて削除されます。 「caba」があり、再び「aba」が表示されて削除されます。現在、「c」のみが取得されます。 「aba」が2回表示されます。 「www」についても同じです。「ww」が表示されたら削除します。現在、「w」のみが表示されます。 「ww」は一度だけ見ました。

それは理にかなっている。

9
cenk ebret