अजगर: 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)]

ध्यान दें कि यह deconstructs 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