为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

泛舟湖上清波郎朗 2022-10-18 17:33:49
我对一个非常简单的字符串计数操作感到困惑:s = 'BANANA's.count('ANA')这应该导致2,对吧?由于子字符串,ANA在 中出现 2 次BANANA。但结果我得到了 1。>>> s = 'BANANA'>>> s.count('ANA')1不知道为什么错误的结果。就是这么简单的操作!感谢任何帮助。PS:我该如何解决这个问题?
查看完整描述

4 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

string.count()不计算重叠事件。


如果你想计算重叠的次数,一个简单的字符串循环将计算它:


s = 'BANANA'

i = 0

cnt = 0

while True:

    i = s.find('ANA', i)

    if i >= 0:

        i += 1

        cnt += 1

    else:

        break

或者,您也可以regex在下面的@Henrique 回答中使用。


查看完整回答
反对 回复 2022-10-18
?
撒科打诨

TA贡献1934条经验 获得超2个赞

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



查看完整回答
反对 回复 2022-10-18
?
BIG阳

TA贡献1859条经验 获得超6个赞

好问题。但是 Python 字符串 count() 不会“回溯”。一旦找到第一个“ANA”,它就会通过剩余的两个字母“NA”向前看。

这种“前向搜索”与大多数编程语言相同,例如 Java indexOf()、 C strstr()和 VB.Net InStr()


查看完整回答
反对 回复 2022-10-18
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

regex使用新库解决了问题。它有一个overlapped非常有用的新参数。


>>>import regex as re

>>>len(re.findall("ANA", "BANANA", overlapped=True))

2

我在 SO 中找到了这个问题的解决方案。


查看完整回答
反对 回复 2022-10-18
  • 4 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信