我正在写一个函数来计算d(Pattern,Dna)=∑ti=1d(Pattern,Dnai),模式与Dna中每个字符串之间的距离之和={Dna1,…,Dnat}。在
样本输入:
AAA级
TTACCTTAAC GATTCTGTC ACGGCGTTCG CCCTAAGAG CGTCAAGGT
样本输出:
五
以下是我的代码:
dna_list = ['TTACCTTAAC', 'GATATCTGTC', 'ACGGCGTTCG', 'CCCTAAAGAG', 'CGTCAGAGGT']
k = 3
k_mer = 'AAA'
hamming_distance = 0
distance = 0
def HammingDistance(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(dna_list)):
for j in xrange(len(dna_list[i])-k+1):
motifs = [dna_list[i][j:j+k]]
if HammingDistance(k_mer, motifs) > hamming_distance:
hamming_distance = HammingDistance(k_mer, motifs)
distance += hamming_distance
print distance
当我运行代码时,它总是显示错误“不等长度序列”。我不明白,因为每次代码都要计算长度相同的“motif”(motif=[dna_list[I][j:j+k]])和k_mer(AAA)之间的差异。在
对于给定代码,15的结果是正确的。每个DNA片段的最大汉明距离是3(每个字母与“AAA”不同),你可以在五个DNA片段中实现这一点。因为“距离”是每个碎片的最大汉明距离之和,那么3×5=15。也许你想用“距离”来表示别的意思?在
作为
HammingDistance
的第二个参数,传递一个列表:它只有一个元素,因此它的长度是1。只需移除外部
[]
。在作为旁注
^{pr2}$很不象Python。考虑一下吧
相关问题 更多 >
编程相关推荐