如何比较字符串和字符串列表,从列表中返回最佳匹配字符串?

时间:2015-07-19 20:42:03

标签: python python-3.x

我的问题在于我的第二个功能代码。

这是我的代码到目前为止....     def simi(d1,d2):         dna_1 = d1.lower()         dna_2 = d2.lower()         lst = []         i = 0         而我< LEN(dna_1):             如果dna_1 [i] == dna_2 [i]:                 lst.append(1)             i + = 1         return len(lst)/ len(d1)

def match(list_1, d , s):
    dna = []
    for item in list_1:
        dna.append(simi(item, d))
        if max(dna) < s:
           return None
    return list_1[max(dna)]

2 个答案:

答案 0 :(得分:0)

你有两个问题,第一个是你在尝试所有元素之前在循环中return,其次你的函数simi(item, d)如果它正常工作则返回一个浮点数,所以试图索引一个列表float也将失败。除了错误或返回None之外,您的代码无法执行任何操作。

我想你想要跟踪每次迭代的最佳状态,并根据simi距离计算的内容以及simi是否为&gt;返回最佳项目。 s或者返回None:

def match(list_1, d , s):
    best = None
    mx = float("-inf")
    for item in list_1:
        f = simi(item, d)
        if f > mx:
            mx = f
            best = item
    return best  if mx > s else None

你也可以在simi中使用range而不是你的while循环使用list comp:

def simi(d1,d2):
    dna_1 = d1.lower()
    dna_2 = d2.lower()
    lst = [1 for i in range(len(dna_1)) if dna_1[i] == dna_2[i] ]
    return len(lst) / len(dna_1)

但是如果你只是想在每次条件为True时加1,你可以使用sum:

def simi(d1,d2):
    dna_1 = d1.lower()
    dna_2 = d2.lower()
    sm = sum(dna_1[i] == dna_2[i] for  i in range(len(dna_1)))
    return sm / len(dna_1)

答案 1 :(得分:0)

使用一些内置函数:

best_match = max(list_of_samples, key=similarity_with_sample)

现在,similarity_with_sample是一个接受一个参数的函数,并返回与TACgtAcGaCGT&#39;的相似性。

现在使用它作为内置最大函数的关键参数:

s

我不确定你的div变量在做什么。