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中)可能会有所不同。
答案 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
。