用difflib模块比较Python中的列表

3 投票
1 回答
2974 浏览
提问于 2025-04-16 14:45

我正在尝试使用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)

撰写回答