Python-如何使用函数和多个返回值加快嵌套for循环的速度

Python-如何使用函数和多个返回值加快嵌套for循环的速度,python,python-3.x,loops,for-loop,nested-loops,Python,Python 3.x,Loops,For Loop,Nested Loops,我正在编写一个python代码来计算两个字符串之间是否存在模糊匹配。如果存在匹配,我必须存储字符串和平均匹配值。要比较的字符串来自一个包含数千个条目的列表 问题是代码执行时间太长。为了加快速度,我在这里查看了其他答案,但没有一个答案有来自循环中内部函数的多个返回值。在这里寻找优化的代码 tokens=['abc','bcd','abe','efg','opq'] valid_list=['acb','abc','abf','bcd','rts','xyz'] for i in tokens:

我正在编写一个python代码来计算两个字符串之间是否存在模糊匹配。如果存在匹配,我必须存储字符串和平均匹配值。要比较的字符串来自一个包含数千个条目的列表 问题是代码执行时间太长。为了加快速度,我在这里查看了其他答案,但没有一个答案有来自循环中内部函数的多个返回值。在这里寻找优化的代码

tokens=['abc','bcd','abe','efg','opq']
valid_list=['acb','abc','abf','bcd','rts','xyz']
for i in tokens:
    for j in valid_list:
        token,valid_entry,avg_match=get_match(i,j)
        if(token!=0):
            potential_entry.append(valid_entry)
            match_tokens.append(token)
            ag_match.append(avg_match)

def get_match(i,j):

   avg_value=(fuzz.ratio(token,chk_str)+fuzz.partial_ratio(token,chk_str)+fuzz.token_sort_ratio(token,chk_str)+fuzz.token_set_ratio(token,chk_str))/4
    if(int(avg_value)>70):
        return token,chk_Str,int(avg_value)
    else:
        return 0,0,0

我能看到的最明显的一点是,如果有任何模糊检查显然不是有效的匹配,您可能会短路

因此,不要把它们全部放在一行中,而是单独做,在得到其他比率之前检查它们是否低于阈值,优先检查你希望首先提供最清晰答案的比率

此外,考虑:

  • 使用对象的单个列表避免附加到三个列表
  • 为您的令牌和有效列表使用集合,以确保未进行任何重复检查
  • 对于if语句,不将
    avg_值
    强制转换为整数,在这里没有什么区别
  • 在执行任何其他检查之前,添加显式的
    i==j
    检查以返回100%的比率

是的。我想检查输入中每个令牌与有效_列表中每个令牌的匹配情况。感谢@Sayse的建议。我已从两个列表中删除了重复项。如果我不强制转换该值,则会得到浮点值错误。我还移除了已经完全匹配的令牌。我在这里发布的代码就是一个例子,因此您可以看到完全匹配的情况。我将尝试实现对象点列表。