2024-09-30 04:29:37 发布
网友
“abba”中子字符串1和子字符串2的结果出现次数应为3(ab,ba,ba)。但是用str.count()我得到了4。有什么建议吗
substring1 = 'ab' substring2 = 'ba' stringg = 'abbabba' print(stringg.count(substring1) + stringg.count(substring2))
在这种情况下,我们可以使用自定义计数函数,从感兴趣的字符串中增加一个子字符串,直到找到匹配项,然后重置它:
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
ab = 2
ba = 2
4
所以,这一行print(stringg.count(substring1) + stringg.count(substring2))做的是正确的工作。它不会忽略您想要的已经包含的子字符串
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)
在这种情况下,我们可以使用自定义计数函数,从感兴趣的字符串中增加一个子字符串,直到找到匹配项,然后重置它:
我们这样称呼它:
这是因为事件是这样计数的。顺便说一句,这台机器正在做正确的事情,你不知怎的错过了我要给你看的东西
String=abba子字符串1=ab子字符串2=ba
因此,从上面可以看到
ab = 2
的计数和ba = 2
的计数。所以当加起来的时候,它会给你总共4
所以,这一行
print(stringg.count(substring1) + stringg.count(substring2))
做的是正确的工作。它不会忽略您想要的已经包含的子字符串要做到这一点,我们可以这样做:
您需要手动计数,这仅适用于大小相等的子字符串:
输出:
编辑:如果您有不同长度的子字符串,您还可以在其上循环:
输出:
相关问题 更多 >
编程相关推荐