Python: het verwijderen van vergelijkbare objecten uit een lijst met behulp van difflib.SequenceMatcher

stemmen
43

Laten we zeggen dat ik heb een lijst van enkele snaren, en er zijn bepaalde strings er zijn, dat zeer, zeer vergelijkbaar. En ik wil die verwijderen bijna duplicaten . Voor dat, ik kwam met de volgende code:

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)

Die lijkt goed te werken, maar ik hou niet echt van geneste lussen en ook deze countoplossing ziet er lelijk. Maar waarschijnlijk is het mogelijk om het te schrijven in een meer Pythonic manier? Met behulp van generatoren, kan zijn?

Zou dankbaar zijn voor een hint, bedankt :)

De vraag is gesteld op 14/12/2017 om 16:09
user
In andere talen...                            


1 antwoorden

stemmen
1

Ik denk dat een schonere manier om dit te schrijven zou zijn om te gebruiken difflibmethodeget_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)]

Merk op dat deze deconstructs ldus misschien wil je een kopie van het voor het eerst te maken.

antwoordde op 14/12/2017 om 16:46
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more