2017-12-14 17 views
0

私はいくつかの文字列のリストを持っていて、そこには非常によく似た文字列があるとしましょう。そして、私はそれらのをほぼ重複して削除したいです。そのために、私は次のコードを思い付いた:Python:difflib.SequenceMatcherを使ってリストから似たオブジェクトを削除する

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ソリューションは醜いどの。しかしおそらくもっとPythonの方法でそれを書き留めることは可能でしょうか?ジェネレータを使用して、可能性がありますか?

がヒントのために感謝される、おかげで

+1

これは[CodeReview](https://codereview.stackexchange.com/)でより良いと思います。 –

答えて

1

:)私はこれを書くためのクリーンな方法は、これはlを解体ので、あなたがしたいことを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)] 

注意を使用することだと思いますそれを最初にコピーしてください。

関連する問題