【发布时间】:2016-02-01 23:18:42
【问题描述】:
我正在尝试解决在字符串中查找最常见的不匹配 k-mers 的问题。要求如下:
Frequent Words with Mismatches 问题:找出字符串中出现不匹配的最频繁的 k-mers。
输入:字符串 Text 以及整数 k 和 d。 (您可以假设 k ≤ 12 和 d ≤ 3。)
输出:所有最常见的 k-mer,文本中最多有 d 个不匹配。
这是一个例子:
示例输入:
ACGTTGCATGTCGCATGATGCATGAGAGCT
4 1
样本输出:
GATG ATGC ATGT
最简单但效率最低的方法是列出文本中的所有k-mers并计算它们之间的hamming_difference,并挑选出hamming_difference小于或等于d的模式,下面是我的代码:
kmer = 4
in_genome = "ACGTTGCATGTCGCATGATGCATGAGAGCT";
in_mistake = 1;
out_result = [];
mismatch_list = []
def hamming_distance(s1, s2):
# Return the Hamming distance between equal-length sequences
if len(s1) != len(s2):
raise ValueError("Undefined for sequences of unequal length")
else:
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
for i in xrange(len(in_genome)-kmer + 1):
v = in_genome[i:i + kmer]
out_result.append(v)
for i in xrange(len(out_result)):
for j in xrange(i + 1, len(out_result)):
if hamming_distance((out_result[i], out_result[j]) <= in_mistake:
mismatch_list.append(out_result[i], out_result[j])
print mismatch_list
当我运行代码时,它总是显示“无效语法”并指出错误来自“if hamming_distance((out_result[i], out_result[j])
另一件事是我知道肯定存在更好的算法。有什么线索吗?
【问题讨论】:
-
语法错误是由于括号不匹配造成的:该行有 2 个左括号,但只有一个右括号。只需删除其中一个左括号即可。