Python:使用difflib.SequenceMatcher从列表中删除类似对象

时间:2017-12-14 18:09:27

标签: python

我们说我有一些字符串的列表,并且那里有某些非常非常类似的字符串。我想删除那些几乎重复的。为此,我想出了以下代码:

from difflib import SequenceMatcher

l = ['Apple', 'Appel', 'Aple', 'Mango']
c = [l[0]]

for i in l:
    count = 0
    for j in c:
        if SequenceMatcher(None, i, j).ratio() < 0.7:
            count += 1
    if count == len(c):
        c.append(i)

这似乎工作正常,但我不喜欢嵌套循环,而且这个count解决方案看起来很难看。但也许可以用更Pythonic的方式写下它?使用发电机,可能是?

非常感谢提示,谢谢:)

1 个答案:

答案 0 :(得分:2)

我认为更简洁的方法是使用difflib方法get_close_matches

from difflib import get_close_matches

l = ['Apple', 'Appel', 'Aple', 'Mango']
c = []

while l:
    word = l.pop()
    c.append(word)
    l = [x for x in l if x not in get_close_matches(word, l, cutoff=0.7)]

请注意,这会解构l,因此您可能需要先复制它。