为什么它会在第一个值之后停止迭代?

时间:2015-07-20 21:07:38

标签: python-3.x dictionary

def similarity(dna1, dna2):
    count = 0
    for i in range(len(dna1)):
        if dna1.lower()[i] == dna2.lower()[i]:
            count += 1
    return count / len(dna1)

def best_match(dna_list, dna):
    for dna_seq in dna_list:
        dna1 = dna_seq
        dna2 = dna
        dict = {dna_seq: similarity(dna1, dna2)}
    return dict

在best_match中,我得到一个包含dna序列(dna_list)的列表。使用上述函数,我需要将每个序列与给定的dna(dna)进行比较。然后返回具有最高相似性的dna序列。我试图创建一个字典来存储dna序列及其相似性值,然后比较相似性,然后返回相应的序列。但是,我被卡住了。当我运行它时,它只返回一个dna序列和相似值;但是,我得到了三个dna序列。我也遇到了麻烦,因为给定的dna序列列表(在dna_list中)可能会有所不同。

1 个答案:

答案 0 :(得分:3)

您正在每次迭代时创建一个新字典。它不会停止迭代,它只是返回上一次迭代的值,而忽略了之前的迭代值。

你想要的是这个:

result = dict()
for dna_seq in dna_list:
    dna1 = dna_seq
    dna2 = dna
    result[dna_seq] = similarity(dna1, dna2)

return result

可以用字典理解更简单地写出:

return {dna_seq:similarity(dna_seq, dna) for dna_seq in dna_list}

除此之外,您不应该调用变量dict,因为它会影响内置类型dict