Python “为什么?”;测试;。计数(';';)返回5?

Python “为什么?”;测试;。计数(';';)返回5?,python,count,Python,Count,这是一个简短的,但非常令人恼火。我知道我可以计算一个字符串在另一个字符串中出现的次数,如下所示: 'banana'.count('a') >>>3 意思是banana包含字母“a”三次 这就是它变得有点奇怪的地方 我的第一个困惑是——当我做'foo.count(“”)时,Python在寻找什么 ''==None==有什么吗 事实似乎并非如此,但从逻辑上讲,'是什么?更重要的是,为什么会这样 'test'.count('') >>>5 返回比字符串长度多一个

这是一个简短的,但非常令人恼火。我知道我可以计算一个字符串在另一个字符串中出现的次数,如下所示:

'banana'.count('a')
>>>3
意思是
banana
包含字母
“a”
三次

这就是它变得有点奇怪的地方

我的第一个困惑是——当我做
'foo.count(“”)
时,Python在寻找什么

''
==None==有什么吗

事实似乎并非如此,但从逻辑上讲,
'
是什么?更重要的是,为什么会这样

'test'.count('')
>>>5
返回比字符串长度多一个的值

一个总是比字母数高1的字符串中到底包含了什么?空虚

编辑:两次
'
字符看起来像一个
字符。为了避免混淆,我在这里讲两次
'

编辑2:关于
''
的数量是如何发生的,似乎有些混乱。请参阅下面的评论。

每一条string1都可以被认为是:

any_string = "" + "".join(any_string) + ""
它正好包含
len(任意字符串)+1个
'
实例


例如,对于
“foo”
,它将是:

"" + "f" + "" + "o" + "" + "o"+ ""
#    |----- from join -------|
可以看到,其中有
4个
实例


但是,请注意,这是一个问题,答案或所有答案都可能以某种方式支持自己的观点。这是一个哲学问题:

  • “零”中包含多少“零”
  • 某物中什么都不包含有多少
这个答案试图解释Python使用的约定,并不意味着所有语言都应该这样做;这只是Python的工作方式。


1空字符串是一个例外,处理方式不同;它们只返回
1
;这是另一种约定

统计
str
中出现的
sub
的次数

由于字符串是序列,它基本上统计
sub
str
中会导致的拆分数量

空字符串位于开头、每个字符之间和结尾


因此,当您使用
'test'
时,如果
len
为4,那么为什么会出现5次
sub
'
)。

因为
'.count('')
返回一个im,假设它实际上不搜索任何内容。它总是返回len(字符串)+1,这只是开发人员做出的一个决定,您可以为其他值(如infinity)创建一个案例,在这里有一个dupe,您可以看到s.count(“”)计算字符串中的字母间空格数,即解析正则表达式时使用的空格数。有关其他信息,请参阅explanation@FlyingThunder请接受另一个答案,这样我就可以删除这个-u-我个人认为这不符合逻辑(尽管其他人可能不同意),请阅读此答案下的注释我同意Sven的说法,他说“无穷多的答案通常与字符串长度加1一样有效”,这是有道理的,我之所以保留它,是因为Qback建议了一种不同的解决方案,根据我的理解,count(“”)计算所有字母,并可能出现“结尾为空”-编辑:不必担心,已被删除。好吧,我想这是有道理的——我的“数虚空”想法离我不远,那么我想8)@Chris_Rands你是对的;这是一个惯例问题。但这里解释的是公约;我会尽量说清楚(呃)。
str.count(sub)