Python - 2つの文字列の違い 質問する

Python - 2つの文字列の違い 質問する

たくさんの単語をリストに保存したいのですが、これらの単語の多くは非常に似ています。たとえば、 wordと、、のafrykanerskojęzycznyような単語がたくさんあります。2 つの文字列の違いを見つけて、最初の文字列から 2 番目の文字列を復元して diff を実行するための効果的な (高速で、差分のサイズが小さい) ソリューションは何ですか?afrykanerskojęzycznymafrykanerskojęzyczninieafrykanerskojęzyczni

ベストアンサー1

使用できます差分これを行うには、difflib モジュールを使用します。このモジュールには、1 つの文字列を別の文字列に変換するために必要なすべての情報が含まれています。

簡単な例:

import difflib

cases=[('afrykanerskojęzyczny', 'afrykanerskojęzycznym'),
       ('afrykanerskojęzyczni', 'nieafrykanerskojęzyczni'),
       ('afrykanerskojęzycznym', 'afrykanerskojęzyczny'),
       ('nieafrykanerskojęzyczni', 'afrykanerskojęzyczni'),
       ('nieafrynerskojęzyczni', 'afrykanerskojzyczni'),
       ('abcdefg','xac')] 

for a,b in cases:     
    print('{} => {}'.format(a,b))  
    for i,s in enumerate(difflib.ndiff(a, b)):
        if s[0]==' ': continue
        elif s[0]=='-':
            print(u'Delete "{}" from position {}'.format(s[-1],i))
        elif s[0]=='+':
            print(u'Add "{}" to position {}'.format(s[-1],i))    
    print()      

プリント:

afrykanerskojęzyczny => afrykanerskojęzycznym
Add "m" to position 20

afrykanerskojęzyczni => nieafrykanerskojęzyczni
Add "n" to position 0
Add "i" to position 1
Add "e" to position 2

afrykanerskojęzycznym => afrykanerskojęzyczny
Delete "m" from position 20

nieafrykanerskojęzyczni => afrykanerskojęzyczni
Delete "n" from position 0
Delete "i" from position 1
Delete "e" from position 2

nieafrynerskojęzyczni => afrykanerskojzyczni
Delete "n" from position 0
Delete "i" from position 1
Delete "e" from position 2
Add "k" to position 7
Add "a" to position 8
Delete "ę" from position 16

abcdefg => xac
Add "x" to position 0
Delete "b" from position 2
Delete "d" from position 4
Delete "e" from position 5
Delete "f" from position 6
Delete "g" from position 7

おすすめ記事