Почему "test".count('') возвращает 5?
Это короткий, но очень раздражающий. Я знаю, что могу подсчитать количество строк, которые происходят в строке, например:
'banana'.count('a')
>>>3
что banana
содержит букву "a"
3 раза.
Вот где это выглядит странно.
Моя первая путаница - когда я делаю 'foo'.count('')
, что ищет Python?
is ''
== None == ничего?
Это, кажется, не быть, но затем снова, то, что ''
логически говоря? И что еще более важно, почему
'test'.count('')
>>>5
верните еще одну длину, чем длина строки?
Что, черт возьми, включено в строку, которая всегда на 1 больше, чем количество букв? пустота?
EDIT: '
символ дважды выглядит один "
характер, я говорю о два раза. '
Здесь, чтобы избежать путаницы
EDIT2: Там, кажется, некоторая путаница, как количество ''
произошло. См. Комментарии ниже.
Ответы
Ответ 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
(''
).