在python中,如何在不重叠的情况下计算给定字符串中两个子字符串的出现次数?

2024-09-30 04:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

“abba”中子字符串1和子字符串2的结果出现次数应为3(ab,ba,ba)。但是用str.count()我得到了4。有什么建议吗

substring1 = 'ab'   
substring2 = 'ba'
stringg = 'abbabba'
print(stringg.count(substring1) + stringg.count(substring2))

Tags: 字符串abcount次数建议print中子str
3条回答

在这种情况下,我们可以使用自定义计数函数,从感兴趣的字符串中增加一个子字符串,直到找到匹配项,然后重置它:

def count(string, *substrings):
    acc = ''  # accumulator
    matches = 0
    for char in string:
        acc += char

        for substring in substrings:
            if substring in acc:
                matches += 1
                acc = ''
                break

    return matches

我们这样称呼它:

count('abbabba', 'ab', 'ba')  # 3

这是因为事件是这样计数的。顺便说一句,这台机器正在做正确的事情,你不知怎的错过了我要给你看的东西

String=abba子字符串1=ab子字符串2=ba

# ab and ba count in stringg abbabba 
# ab = 1 ['ab'babba]
# ba = 1 [ab'ba'bba]
# ab = 1 [abb'ab'ba]
# ba = 1 [abbab'ba']

因此,从上面可以看到ab = 2的计数和ba = 2的计数。所以当加起来的时候,它会给你总共4

所以,这一行print(stringg.count(substring1) + stringg.count(substring2))做的是正确的工作。它不会忽略您想要的已经包含的子字符串

要做到这一点,我们可以这样做:

substring1 = 'ab'   
substring2 = 'ba'
stringg = 'abbabba'

i = 0
count = 0
while i <= len(stringg) - 2:
    if stringg[i]+stringg[i+1] == substring1 or stringg[i]+stringg[i+1] == substring2:
        count += 1
        i += 2
    else:
        i += 1

print(count) # OUTPUT 3

您需要手动计数,这仅适用于大小相等的子字符串:

stringg = 'abbabba'
patterns = {'ab': 0, 'ba': 0}
c = 0

while c < len(stringg) -1:
    substr = stringg[c:c+2]
    if substr in patterns:
        patterns[substr] += 1
        c += 1
    c += 1

print (patterns)
print ('Total', sum(patterns.values()))

输出:

{'ab': 1, 'ba': 2}
Total 3

编辑:如果您有不同长度的子字符串,您还可以在其上循环:

stringg = 'abbabbaccccab'
patterns = {'ab': 0, 'ba': 0, 'ccc': 0}
c = 0

while c < len(stringg) -1:
    for pattern in patterns:
        substr = stringg[c:c+len(pattern)]
        if substr == pattern:
            patterns[substr] += 1
            c += len(pattern) - 1
            break
    c += 1

print (patterns)
print ('Total', sum(patterns.values()))

输出:

{'ab': 2, 'ba': 2, 'ccc': 1}
('Total', 5)

相关问题 更多 >

    热门问题