Подтвердить что ты не робот

Почему "test".count('') возвращает 5?

Это короткий, но очень раздражающий. Я знаю, что могу подсчитать количество строк, которые происходят в строке, например:

'banana'.count('a')
>>>3

что banana содержит букву "a" 3 раза.

Вот где это выглядит странно.

Моя первая путаница - когда я делаю 'foo'.count(''), что ищет Python?

is '' == None == ничего?

Это, кажется, не быть, но затем снова, то, что '' логически говоря? И что еще более важно, почему

'test'.count('')
>>>5

верните еще одну длину, чем длина строки?

Что, черт возьми, включено в строку, которая всегда на 1 больше, чем количество букв? пустота?

EDIT: ' символ дважды выглядит один " характер, я говорю о два раза. ' Здесь, чтобы избежать путаницы

EDIT2: Там, кажется, некоторая путаница, как количество '' произошло. См. Комментарии ниже.

4b9b3361

Ответ 1

Каждая строка 1 может рассматриваться как:

any_string = "" + "".join(any_string) + ""

который содержит ровно len(any_string) + 1 экземпляр ''.


Например, для "foo" это будет:

"" + "f" + "" + "o" + "" + "o"+ ""
#    |----- from join -------|

Как можно видеть, есть 4 экземпляра "" в ней.


Обратите внимание, однако, что это проблема, когда ни один ответ или все ответы не могут каким-то образом поддержать случай для себя. Он становится философским:

  • Сколько ничего не содержится ни в чем?
  • Сколько ничего не содержится в чем-то?

Этот ответ пытается объяснить соглашение, используемое Python, и не предполагает, что это так, как это делают все языки; это как раз то, как это делает Python.


1 Пустые строки являются исключением и обрабатываются по-разному; они просто возвращают 1; что является еще одним соглашением.

Ответ 2

str.count(sub)

Подсчитывает количество вхождений sub в str.

Поскольку строки являются последовательностями, в основном они подсчитывают количество sub будут вызывать на str.

Пустая строка находится в начале, между каждым символом и в конце.

Следовательно, почему, когда вы используете 'test', который имеет len 4, вы получаете 5 вхождений sub ('').