Почему "www".count( "ww" ) возвращает 1, а не 2?
В моем коде:
>> s = 'abacaba'
>> s.count('aba')
>> 2
Для приведенного выше кода я получаю правильный ответ, так как "aba" встречается 2 раза в строке s
.
Но для следующего случая:
>> s = 'www'
>> s.count('ww')
>> 1
В этом случае я ожидаю, что s.count('ww')
вернет 2
. Но он возвращает 1
.
Почему?
Ответы
Ответ 1
Прочитайте docs:
Возвращает число (неперекрывающихся) вхождений подстроки sub в строке s[start:end]
. Значения по умолчанию для начала и конца и интерпретации отрицательных значений такие же, как для срезов.
Поскольку "ww" сначала согласовывается, оно исходит из третьего "w" и не соответствует "ww".
Ответ 2
string.count(s, sub[, start[, end]])
:
Возвращает число (неперекрывающихся) вхождений подстроки sub в строке s [начало: конец]. Значения по умолчанию для начала и конца и интерпретации отрицательных значений такие же, как для срезов.
источник: https://docs.python.org/2/library/string.html
Ответ 3
Просто попробуйте подумать, как:
В этом слове: "abacaba", сколько неперекрывающихся "aba" слов вы видите? Я вижу 2. И я также вижу "c".
В этом слове: "www", сколько неперекрывающихся "ww" слов вы видите? Я вижу 1. И я также вижу "w".
Для лучшего объяснения подумайте, что вы удаляете экземпляр, когда видите.
Для "abacaba" вы видите "aba" и удаляете его. теперь есть "каба", вы снова видите "aba" и удаляете его. теперь вы получаете только "c". вы видите "aba" два раза. То же самое для "www", вы видите "ww" один раз и удаляете его. теперь вы видите только "w". вы видели только "ww" только.
Это имеет смысл.