Python: törlésével hasonló tárgyakat egy listát difflib.SequenceMatcher

szavazat
43

Tegyük fel, hogy van egy lista néhány szálat, és vannak bizonyos húrok vannak, hogy nagyon, nagyon hasonló. És azt akarom, hogy törölni ezeket szinte ismétli . Az, hogy én találtam ki az alábbi kódot:

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)

Amely úgy tűnik, hogy jól működik, de én nem igazán szeretem a beágyazott hurok és ez countmegoldást rondán néz ki. De talán ez lehet, hogy írd le egy Pythonic módon? Generátor felhasználásával lehet?

Hálás lenne a célzást, köszönöm :)

A kérdést 14/12/2017 16:09
felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

Azt hiszem, egy tisztább módon, hogy megírom ezt az lenne, hogy diffliba módszerget_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)]

Megjegyzendő, hogy ez bont l, így érdemes lehet másolatot készíthet először.

Válaszolt 14/12/2017 16:46
a forrás felhasználó

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