Why does “test”.count('') return 5? [duplicate]

安稳与你 提交于 2020-01-09 10:39:16

问题


This is a short one, yet very irritating. I know I can count the amount of times a string occurs within another string like this:

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

meaning that banana contains the letter "a" 3 times.

This is where it gets kind of weird.

My first confusion is - when I do 'foo'.count(''), what does Python look for?

is '' == None == anything?

It doesn't seem to be the case, but then again, what IS '' logically speaking? And more importantly, why does

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

return one more than the length of the string?

What the hell is included in a string that's always 1 higher than the amount of letters? the void?

EDIT: the ' character twice looks like one " character. I am talking about two times ' here, to avoid confusion

EDIT2: There seems to be some confusion about how the amount of '' happen. Refer to comments below.


回答1:


Every string1 can be thought of as:

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

which contains exactly len(any_string) + 1 instances of ''.


For "foo" for example, it would be:

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

As it can be seen there are 4 instances of "" in it.


Note however, that this is a problem where no answer or all answers could somehow support a case for themselves. It get's philosophical:

  • How much nothing is contained in nothing?
  • How much nothing is contained in something?

This answer tries to explain the convention used by Python and does not intend to suggest that this is the way all languages do it \ should be doing it; it is just how Python does it.


1Empty strings are an exception and are handled differently; they simply return 1; which is yet another convention.




回答2:


str.count(sub)

Counts the number of occurrences of sub in str.

Since strings are sequences, it basically counts the number of splits sub would cause in str.

An empty string is at the beginning, between each character, and at the end.

Hence, why when you use 'test', which has a len of 4, you get 5 occurrences of sub ('').



来源:https://stackoverflow.com/questions/50235859/why-does-test-count-return-5

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!