反向搜索实现python

2024-03-29 00:06:19 发布

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

我处理一些字符串搜索任务只是为了提高搜索的效率。 我正在尝试实现一种方法,通过使用向后搜索来计算给定字符串集中有多少子字符串。 例如,给定以下字符串:

original = 'panamabananas$' 
s = smnpbnnaaaaa$a 
s1 = $aaaaaabmnnnps #sorted version of s

我试图找出子字符串“ban”出现了多少次。为此,我考虑用zip function遍历两个字符串。在向后搜索中,我应该首先在s1中查找bann)的最后一个字符,并查看它与s中的下一个字符a的匹配位置。它在索引9、10和11中匹配,它们实际上是s中的第三、第四和第五个a。下一个要查找的字符是b,但只查找之前发生的匹配(这意味着s1中的ns中的a匹配)。因此,我们从s中选取这些a(第三、第四和第五个),看看s1中的第三、第四或第五个a是否与s中的任何b匹配。这样我们就发现了“ban”的出现。你知道吗

对我来说,迭代和保存cuasi事件似乎很复杂,所以我尝试的是这样的:

n = 0 #counter of occurences
for i, j in zip(s1, s):
    if i == 'n' and j == 'a': # this should save the match 
        if i[3:6] == 'a' and any(j[3:6] == 'b'): 
            n += 1

我认为嵌套if语句可能是需要的,但我仍然是一个初学者。因为我得到了0次,而原来只有一次。你知道吗


Tags: andof方法字符串ifzip字符效率
1条回答
网友
1楼 · 发布于 2024-03-29 00:06:19

可以使用find运行循环来计算子字符串的出现次数。你知道吗

s = 'panamabananasbananasba'
ss = 'ban'
count = 0
idx = s.find(ss, 0)
while (idx != -1):
    count += 1
    idx += len(ss)
    idx = s.find(ss, idx)
print count

如果您真的想要向后搜索,那么反转字符串和子字符串并执行相同的机制。你知道吗

s = 'panamabananasbananasban'
s = s[::-1]
ss = 'ban'
ss = ss[::-1]

相关问题 更多 >