簡體   English   中英

Python - 如何使用 function 和多個返回值加快我們的嵌套 for 循環

[英]Python - How to speed us Nested for loop with function and multiple return value

我正在編寫一個 python 代碼來計算兩個字符串之間是否存在任何模糊匹配。 如果有匹配,我必須存儲字符串和平均匹配值。 要比較的字符串來自一個包含數千個條目的列表。問題是代碼執行時間過長。 為了加快速度,我在這里查看了其他答案,但它們都沒有來自循環中內部 function 的多個返回值。 在這里尋找優化的代碼...

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

我可以看到的主要明顯的事情是,如果任何明顯不是有效匹配,您可以短路模糊檢查。

因此,與其在一行中完成所有這些,而是單獨進行,並在獲得其他比率之前檢查它們是否低於閾值,優先檢查您希望首先為此提供最清晰答案的比率。

另外,請考慮:

  • 使用 object 的單個列表來避免 append 到三個列表
  • 為您的令牌和有效列表使用集合以確保沒有進行任何重復檢查
  • 沒有將avg_value轉換為 if 語句的 integer,它在這里並沒有真正的區別。
  • 在進行任何其他檢查之前添加顯式i == j檢查以返回 100% 的比率

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM