【问题标题】:Why does "test".count('') return 5? [duplicate]为什么“test”.count('') 返回 5? [复制]
【发布时间】:2018-05-08 14:17:36
【问题描述】:

这很短,但很烦人。我知道我可以计算一个字符串在另一个字符串中出现的次数,如下所示:

'banana'.count('a')
>>>3

表示banana 包含字母"a" 3 次。

这就是它变得有点奇怪的地方。

我的第一个困惑是 - 当我执行 'foo'.count('') 时,Python 会寻找什么?

'' == 无 == 什么?

似乎并非如此,但话说回来,从逻辑上讲,'' 是什么?更重要的是,为什么

'test'.count('')
>>>5

返回比字符串的长度多一?

一个总是比字母数量高 1 的字符串到底包含什么?虚无?

编辑:' 字符两次看起来像一个" 字符。我这里讲了两次',避免混淆

EDIT2:'' 的数量似乎有些混乱。参考下面的cmets。

【问题讨论】:

  • 因为 ''.count('') 返回一个 im 假设它实际上什么都不搜索。
  • 它总是返回 len(string)+1,这只是开发人员做出的决定,你可以为其他值(如无穷大)做一个案例,某处有一个欺骗
  • 您可以看到 s.count('') 计算字符串中的字母间空格数,即解析正则表达式时使用的空格数。
  • 其他解释见here
  • @FlyingThunder 请接受另一个答案,这样我就可以删除这个-_-

标签: python count


【解决方案1】:

每个字符串1都可以认为是:

any_string = "" + "".join(any_string) + ""

其中正好包含len(any_string) + 1'' 实例。


"foo" 为例,它将是:

"" + "f" + "" + "o" + "" + "o"+ ""
#    |----- from join -------|

可以看出有4实例""里面。


但是请注意,这是一个问题,no 答案或 所有 答案可能会以某种方式支持自己的案例。它变得很哲学:

  • 虚无中包含多少虚无?
  • 什么东西里有多少什么都没有?

这个答案试图解释 Python 使用的约定,并不打算暗示这是所有语言都应该这样做的方式; 这正是 Python 的做法。


1空字符串是一个例外,处理方式不同;他们只是返回1;这是另一个约定。

【讨论】:

  • 就我个人而言,我认为这在逻辑上并不完全符合(尽管其他人可能不同意),请阅读此答案下的 cmets stackoverflow.com/questions/40192449/… 我同意 Sven 的说法,他说“无限经常与答案一样有效字符串长度加一"
  • 这是有道理的,我只是保留它,因为据我所知 Qback 提出了一个不同的解决方案,其中 count('') 计算所有字母和可能的“结束 Null” - 编辑:没关系那个,被删除了。好吧,我想这是有道理的——我的“计算虚空”的想法并没有那么远,然后我猜 8)
  • @Chris_Rands 你是对的;这是一个约定俗成的问题。但这里解释的是约定;我会尽量说清楚(呃)。
【解决方案2】:
str.count(sub)

计算substr 中出现的次数。

由于字符串是序列,它基本上计算substr 中导致的拆分次数。

空字符串位于开头、每个字符之间和结尾。

因此,为什么当您使用 'test'len 为 4)时,您会出现 5 次 sub ('')。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2014-12-29
    • 2013-02-25
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多