Python: sletter lignende objekter fra en liste ved hjelp difflib.SequenceMatcher

stemmer
43

La oss si jeg har en liste over noen strenger, og det er visse strenger der som veldig, veldig like. Og jeg ønsker å slette disse nesten duplikater . For det, kom jeg opp med følgende kode:

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)

Som synes å fungere fint, men jeg har egentlig ikke liker nestede løkker og også denne countløsningen ser stygg. Men sannsynligvis er det mulig å skrive det ned i en mer Pytonske måte? Ved hjelp av generatorer, kan være?

Ville være takknemlig for et hint, takk :)

Publisert på 14/12/2017 klokken 16:09
bruker
På andre språk...                            


1 svar

stemmer
1

Jeg tror en renere måte å skrive dette ville være å bruke difflibmetodenget_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 at dette dekonstruerer lså det kan være lurt å lage en kopi av det første.

Svarte 14/12/2017 kl. 16:46
kilden bruker

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