计算模式与Dna中每个字符串之间的距离之和={Dna1,…,Dnat}

2024-07-05 14:01:51 发布

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

我正在写一个函数来计算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)之间的差异。在


Tags: 代码inforlenlistdnadistancepattern
2条回答

对于给定代码,15的结果是正确的。每个DNA片段的最大汉明距离是3(每个字母与“AAA”不同),你可以在五个DNA片段中实现这一点。因为“距离”是每个碎片的最大汉明距离之和,那么3×5=15。也许你想用“距离”来表示别的意思?在

dna_list = ['TTACCTTAAC', 'GATATCTGTC', 'ACGGCGTTCG', 'CCCTAAAGAG', 'CGTCAGAGGT']
k_mer = 'AAA'
k_mer_length = len(k_mer)
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")

    return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))

for index, dna in enumerate(dna_list):

    greatest_hamming_distance = 0

    for offset in range(len(dna) - k_mer_length + 1):

        motif = dna[offset:offset + k_mer_length]

        hamming_distance = HammingDistance(k_mer, motif)

        if hamming_distance > greatest_hamming_distance:
            greatest_hamming_distance = hamming_distance

    distance += greatest_hamming_distance

print(distance)

作为HammingDistance的第二个参数,传递一个列表:

    motifs = [dna_list[i][j:j+k]]

它只有一个元素,因此它的长度是1。只需移除外部[]。在

作为旁注

^{pr2}$

很不象Python。考虑一下吧

    for dna in dna_list:

相关问题 更多 >