这是一个很短的,但非常恼人。我知道我可以计算字符串在另一个字符串中出现的次数,如下所示:
'banana'.count('a')
>>>3
表示banana
包含字母"a"
3次。
这就是它有点怪异的地方。
我的第一个困惑是 - 当我做'foo'.count('')
时,Python会寻找什么?
是''
==无==任何东西?
情况似乎并非如此,但从逻辑上讲,这是什么?''
?更重要的是,为什么
'test'.count('')
>>>5
返回超过字符串长度的一个?
字符串中包含的内容总是比字母数高1?虚空?
编辑:'
字符两次看起来像一个"
个字符。我在这里谈论两次'
,以避免混淆
EDIT2:关于''
的数量如何发生似乎存在一些混淆。请参阅以下评论。
答案 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)
计算sub
中str
的出现次数。
由于字符串是序列,它基本上会计算sub
中str
引起的分割数。{/ p>
一个空字符串位于每个字符的开头,最后一个字符串。
因此,当您使用'test'
为len
的{{1}}时,为什么会出现sub
(''
)5次。