我们说我有一些字符串的列表,并且那里有某些非常非常类似的字符串。我想删除那些几乎重复的。为此,我想出了以下代码:
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的方式写下它?使用发电机,可能是?
非常感谢提示,谢谢:)
答案 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
,因此您可能需要先复制它。