【问题标题】:How does the count() method work? [duplicate]count() 方法是如何工作的? [复制]
【发布时间】:2018-04-23 04:04:56
【问题描述】:

我知道str.count(sub) 返回子字符串 sub 的出现次数。 但是我遇到了一个我无法理解的奇怪问题。
我的代码如下:

str = 'helloworld'
print(str.count(''))
>>>11

输出令人费解。为什么返回 11? 如果'' 表示任何字母,为什么不返回它的长度(10)? 我还没有找到任何关于这个的答案。 谁能告诉我具体的实现?

【问题讨论】:

  • '' 不表示任何字母,它表示一个空字符串。 'helloworld' 中有 11 个空字符串,一个在开头,每对字母之间有 9 个,最后一个。如果您想要长度,请使用len('helloworld')
  • 字符串以空字符串开头,也以 1 结尾——所以总是比字符数多 1。
  • 尝试查看 str.count.__doc__
  • 认为"foo" 等于"" + "f" + "" + "o" + "" + "o" + "",这在某种意义上是字符串"foo" 中包含的最小空字符串数。

标签: python


【解决方案1】:

'' 并不表示 any 字符串,它表示 no 字符串(也就是空字符串或 0 长度字符串)。严格来说,一个字符串中有无数个长度为 0 的字符串,但实际上,返回的是 len(string) + 1 - 一个用于第一个字符之前,一个用于每个字符之后。

这种情况在count.h 中有明确的特殊情况:

if (sub_len == 0)
    return (str_len < maxcount) ? str_len + 1 : maxcount;

当搜索字符串为空字符串时,默认返回len(string) + 1

【讨论】:

  • 非常感谢,@COLDSPEED,你的解释真的很有帮助。
  • @COLDSPEED 很抱歉再次打扰您。当我查看您上面提到的实现(count.h)时,有一行我无法理解(第 14 行)。 if (str_len
  • @Yixin 在没有太多关于 python 内部知识的情况下,当您使用“start”参数(开始搜索的索引)调用 str.count 时,它看起来会处理另一个无效情况,并且开始索引大于字符串的长度。默认情况下,开始 = 0。
  • 你的意思是这里的变量str_len其实不是原始字符串的长度?可能是由“start”参数计算的值。
  • @Yixin 我想它是由谁调用它来计算的。 str_len = len(str) - start,当start > len(str)时有可能低于0。
猜你喜欢
  • 2023-01-27
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2017-08-06
  • 2020-10-17
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多