繁体   English   中英

为什么str.count('')和len(str)给出不同的输出?

[英]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_countsource ),该函数继续运行,并且当子的长度为零时,返回字符串的长度加一:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM