用difflib模块比较Python中的列表
我正在尝试使用difflib这个库。我有两个列表:L_1和L_2,里面都是字符串。我想知道这两个列表里的内容是否相似(顺序不重要)。
L_1 = ["Bob", "Mary", "Hans"]
L_2 = ["Bob", "Marie", "Háns"]
这个应该是可以的。但是
L_1 = ["Nirdosch", "Mary", "Rolf"]
L_2 = ["Bob", "Marie", "Háns"]
这个就不可以。
我想到一个办法,就是遍历第一个列表L_1,然后用
difflib.get_close_matches()
这个方法去和第二个列表L_2里的每个元素进行匹配。如果找到了相似的内容,且相似度大于0.7,就把它从L_2中删掉,然后继续。但我觉得这个方法可能不是很好。有没有更好的办法呢?
1 个回答
2
我会这样做:
import difflib
L_1 = ["Bob", "Mary", "Hans"]
L_2 = ["Bob", "Marie", "Hans"]
def similiarity(L_1, L_2):
L_1 = set(intern(w) for w in L_1)
L_2 = set(intern(w) for w in L_2)
to_match = L_1.difference( L_2)
against = L_2.difference(L_1)
for w in to_match:
res = difflib.get_close_matches(w, against)
if len(res):
against.remove( res[0] )
return (len(L_2)-len(against)) / (len(L_1))
print similiarity(L_1,L_2)