Python: difflib.SequenceMatcher kullanarak bir listeden benzer nesneleri silme

oy
43

En Bazı dizeleri listesini var diyelim ve bazı dizeleri çok çok benzer orada vardır. Ve o silmek istediğiniz neredeyse çiftleri . Bunun için, aşağıdaki kodu ile geldi:

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)

Hangi iyi iş gibi görünüyor ama iç içe döngüler pek hoşlanmadığını ve ayrıca bu countçözüm çirkin görünüyor. Ama muhtemelen bir daha Pythonictir şekilde bunu yazmak mümkündür? Olmak, jeneratörler olabilir mi kullanıyorsunuz?

Teşekkürler bir ipucu için minnettar olurdu :)

Oluştur 14/12/2017 saat 16:09
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Bunu yazmak için temizleyici bir yolu kullanmak olacağını düşünüyorum difflibyöntemiget_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)]

Bu dekonstürüksiyon unutmayın löncelikle bir kopyasını yapmak isteyebilirsiniz.

Cevap 14/12/2017 saat 16:46
kaynak kullanıcı

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