2017-12-14 1 views
0

Nehmen wir an, ich habe eine Liste von einigen Strings, und dort gibt es bestimmte Strings, die sehr, sehr ähnlich sind. Und ich möchte diese fast Duplikate löschen. Dafür kam ich mit dem folgenden Code auf:Python: Löschen von ähnlichen Objekten aus einer Liste mit difflib.SequenceMatcher

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) 

Welche gut zu funktionieren scheint, aber ich weiß nicht wirklich wie verschachtelte Schleifen und auch diese count Lösung sieht hässlich aus. Aber wahrscheinlich ist es möglich, es auf eine pythonischere Art und Weise zu schreiben? Generatoren verwenden, kann sein?

Wäre für einen Hinweis dankbar, danke :)

+1

Ich denke, das wäre besser auf [CodeReview] (https://codereview.stackexchange.com/). –

Antwort

1

ich eine saubere Art und Weise denken, diese difflib Methode 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)] 

Hinweis zu verwenden, zu schreiben wäre, dass diese dekonstruiert l so können Sie wollen mache zuerst eine Kopie davon.

Verwandte Themen