Python: vymazání podobné objekty ze seznamu pomocí difflib.SequenceMatcher

hlasů
43

Řekněme, že mám seznam některých řetězců, a tam jsou některé struny tam, že velmi, velmi podobné. A já chci, aby odstranit tyto téměř duplikáty . Za to, že jsem přišel s následující kód:

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)

Který se zdá, že funguje, ale já to opravdu jako vnořené smyčky a také toto countřešení vypadá ošklivě. Ale pravděpodobně je možné napsat to ve více Pythonic způsobem? Pomocí generátorů, může být?

Bych vděčný za náznak, díky :)

Položena 14/12/2017 v 16:09
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Myslím, že čistší způsob, jak psát to by bylo použít difflibmetoduget_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)]

Všimněte si, že tento deconstructs ltakže možná budete chtít vytvořit kopii jako první.

Odpovězeno 14/12/2017 v 16:46
zdroj uživatelem

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