[英]Why are str.count('') and len(str) giving different output?
查看以下代码,并请解释为什么str.count('')
方法和len(str)
函数给出两个不同的输出。
a=''
print(len(a))
print(a.count(''))
输出:
0
1
str.count()
计算子字符串的非重叠出现次数:
返回substring sub的不重叠出现的次数。
恰好有一个这样的地方,子串''
出现在字符串''
:”的开头。 因此,计数应返回1
。
一般来说,空字符串将匹配给定字符串中的所有位置 ,包括开始和结尾处的正确位置 ,因此计数应始终为长度加1:
>>> (' ' * 100).count('')
101
这是因为空字符串被认为存在于字符串的所有字符之间。 对于字符串长度2,有3个空字符串; 开头是一个,两个字符之间是一个,结尾是一个。
是的,结果是不同的,而且它们是完全正确的。
.count('')
计算零长度字符串的位置数。 您也可以将其视为可能的光标位置数。
"test".count('')
t e s t
^ ^ ^ ^ ^
而不是计算字符数(例如len(str)
),而是计算反字符数。
说明文件 :
返回范围为[start,end]的子序列sub的非重叠出现次数。 可选参数start和end解释为切片表示法。
如果看一下实现 ,我们会发现它调用了函数stringlib_count
( source ),该函数继续运行,并且当子的长度为零时,返回字符串的长度加一:
if (sub_len == 0)
return (str_len < maxcount) ? str_len + 1 : maxcount;
( 来源 )
注意 : maxcount
设置为size_t的最大正值。
当然,这只是一个简短的提示。 如果我们跳过该检查,代码将继续调用FASTSEARCH 。
FASTSHEARCH如何实施 ? 它进行循环 ,检查每个位置是否字符串与该位置的子匹配。
由于它正在寻找一个空字符串,因此它将说它在每个位置都匹配(在每个位置,它都找不到不相同的字符,直到子程序的长度为止)。
请记住,它从头到尾都在包含范围内。 这意味着它将在字符串的每个位置查找,即:
那是每个字符一个位置(在每个字符之前)加一个位置(结尾)。 或者,如果愿意,它是每个字符一个位置(在每个字符之后)加一个位置(开始)。 无论哪种情况,它都将返回字符串的长度加一。 开发人员将其短路以避免循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.