为什么“test”.count('')返回5?

时间:2018-05-08 14:17:37

标签: python count

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

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

表示banana包含字母"a" 3次。

这就是它有点怪异的地方。

我的第一个困惑是 - 当我做'foo'.count('')时,Python会寻找什么?

'' ==无==任何东西?

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

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

返回超过字符串长度的一个?

字符串中包含的内容总是比字母数高1?虚空?

编辑:'字符两次看起来像一个"个字符。我在这里谈论两次',以避免混淆

EDIT2:关于''的数量如何发生似乎存在一些混淆。请参阅以下评论。

2 个答案:

答案 0 :(得分:26)

每个字符串 1 可以被认为是:

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

其中包含len(any_string) + 1的{​​{1}}个''个实例。

例如,对于"foo",它将是:

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

可以看出,中有4 ""个实例。

但请注意,这是一个问题,没有答案或所有答案可以某种方式为自己支持案例。这是哲学上的:

  • 什么都没有包含在内?
  • 东西中包含了多少东西?

这个答案试图解释Python使用的约定,并不打算暗示这是所有语言都应该这样做的方式。 这就是Python的用途。

1 空字符串是一个例外,处理方式不同;他们只是回归1;这是另一个惯例。

答案 1 :(得分:7)

str.count(sub)

计算substr的出现次数。

由于字符串是序列,它基本上会计算substr引起的分割数。{/ p>

一个空字符串位于每个字符的开头,最后一个字符串。

因此,当您使用'test'len的{​​{1}}时,为什么会出现sub'')5次。