【发布时间】:2017-11-25 00:38:41
【问题描述】:
试图实现 Boyer Moore,错误的字符匹配算法而不看答案。如果没有找到模式,我想退出我只写一行“不匹配”的循环,这是我的代码:
T = 'ATGGGTATGGCTCGGCTCGG'
p = 'ATCG'
skip = 0
while skip + len(p) < len(T):
string = T[skip:skip+len(p)]
if string == p:
print "offset at: ", skip
break
for i in range(len(string), 0, -1):
if (string[i-1] != p[i-1]):
if string[i-1] in p[:i-1]:
skip += (i - p.find(string[i-1]) - 1)
break
elif not string[i-1] in p[:i-1]:
skip += i
break
关于如何修改代码的任何点击。
谢谢,
xp
edit:Scheme 给了我答案,就这么简单。我在行字符串 == p 或字符串!= p 中如此循环我的头。谢谢你们所有的cmets。
【问题讨论】:
-
听起来while-else 在这里可能有用,但是您对您想要做的事情的描述是模棱两可的,并且缺少太多细节来说明您真正想要做什么。
-
您可能想看看biopython 或类似的东西是否具有您想要的功能,或者Python 的内置字符串搜索算法是否足以满足您的用例。看起来您正在尝试实现高级字符串搜索算法(Boyer-Moore?),但您没有进行 Boyer-Moore 的预处理,并且诸如复制每个字符串切片和 Python 解释器开销之类的事情会减慢速度也下来了。
-
如何在循环之前使用布尔变量
match = False,以及在循环之后/外部if not match: print "No match"
标签: python while-loop