Python: διαγραφή παρόμοια αντικείμενα από μια λίστα χρησιμοποιώντας difflib.SequenceMatcher

ψήφοι
43

Ας πούμε ότι έχετε μια λίστα με μερικές χορδές, και υπάρχουν ορισμένες χορδές εκεί που είναι πολύ, πολύ παρόμοια. Και θέλω να διαγράψετε αυτά τα σχεδόν εις διπλούν . Γι 'αυτό, ήρθα με τον ακόλουθο κώδικα:

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)

Ποια φαίνεται να δουλεύουν μια χαρά, αλλά εγώ δεν αρέσει ένθετων βρόχων, αλλά και αυτή η countλύση φαίνεται άσχημο. Αλλά ίσως είναι δυνατό να το γράψετε σε ένα πιο Pythonic τρόπο; Χρησιμοποιώντας γεννήτριες, μπορεί να είναι;

Θα ήμουν ευγνώμων για μια υπόδειξη, χάρη :)

Δημοσιεύθηκε 14/12/2017 στις 16:09
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Νομίζω ότι ένα καθαρότερο τρόπο για να γράψω αυτό θα ήταν να χρησιμοποιήσει difflibτη μέθοδοget_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)]

Σημειώστε ότι αυτό αποδομεί lέτσι μπορείτε να θελήσετε να κάνετε ένα αντίγραφο του πρώτου.

Απαντήθηκε 14/12/2017 στις 16:46
πηγή χρήστη

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