2016-10-22 82 views
0

请看下面的代码,并解释为什么str.count('')方法和len(str)函数给出两个不同的输出。为什么str.count('')和len(str)给出不同的输出?

a='' 
print(len(a)) 
print(a.count('')) 

输出:

0 
1 
+2

为什么*应该*他们给出相同的输出?空字符串中有一个空字符串。一个空字符串的长度为0. –

+0

那么,为什么a =''<---(这里我给了两个空格)是给3个空字符串,长度是2?感谢您的回复@MartijnPieters – liberal

+0

因为在开始与第一个空间之间有一个空字符串,第一个与第二个空间之间有一个空字符串,最后一个空格与结束之间有一个空字符串。 –

回答

5

str.count()计数的子串的非重叠出现:

返回非重叠出现串的数目。

恰好有一个这样的地方,字符串''出现在字符串'':正好在开头。所以计数应该返回1。一般来说,空字符串会匹配在的所有位置给定的字符串中,包括正确的开始和结束,因此计数应始终是长度加1:

>>> (' ' * 100).count('') 
101 

这是因为空字符串被认为存在于一个字符串的所有字符之间;所以对于字符串长度2,有3个空字符串;一个在开始时,一个在两个角色之间,一个在结尾。

所以,是的,结果是不同的,它们是完全正确的。

+3

我不知道,如果“恰好有一个这样的地方,子串''在字符串''中出现:在开始处右边。“是正确的方式来表达它。 CPython似乎特殊情况下的'len(substr)== 0'和[return'len(str)+ 1'](https://github.com/python/cpython/blob/master/Objects/stringlib/count .h#L16) –

+1

@ JimFasarakis-Hilliard:我不确定你是否已经完全阅读了我的答案,但我确切地说明了代码的作用。 –

+2

对于我来说,在传递空字符串时应该返回什么'count()是相当不清楚的。如何计算出现次数是一个惯例问题,我认为为这种情况抛出一个“ValueError”是合理的。 “非重叠”意味着两个出现点的交集是空字符串,因此如果在索引0处出现两个空字符串,它们实际上是非重叠的。 –

相关问题