str.count() 方法中的错误结果

我对一个非常简单的字符串计数操作感到困惑:


s = 'BANANA'

s.count('ANA')

这应该导致2,对吧?由于子字符串,ANA在 中出现 2 次BANANA。


但结果我得到了 1。


>>> s = 'BANANA'

>>> s.count('ANA')

1

不知道为什么错误的结果。就是这么简单的操作!


感谢任何帮助。


PS:我该如何解决这个问题?


泛舟湖上清波郎朗
浏览 103回答 4
4回答

qq_遁去的一_1

string.count()不计算重叠事件。如果你想计算重叠的次数,一个简单的字符串循环将计算它:s = 'BANANA'i = 0cnt = 0while True:    i = s.find('ANA', i)    if i >= 0:        i += 1        cnt += 1    else:        break或者,您也可以regex在下面的@Henrique 回答中使用。

撒科打诨

在“BANANA”中,只有一个完整的“ANA”。Count() 返回 1,因为在它找到 'ANA' 之后,剩下的就是 'NA'。

BIG阳

好问题。但是 Python 字符串 count() 不会“回溯”。一旦找到第一个“ANA”,它就会通过剩余的两个字母“NA”向前看。这种“前向搜索”与大多数编程语言相同,例如 Java indexOf()、 C strstr()和 VB.Net InStr()

神不在的星期二

regex使用新库解决了问题。它有一个overlapped非常有用的新参数。>>>import regex as re>>>len(re.findall("ANA", "BANANA", overlapped=True))2我在 SO 中找到了这个问题的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python