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.
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:
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.
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
(''
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With