1

質問は次のとおりです。

それぞれの文字数が同じ 2 つの単語が与えられた場合、最初の単語から 2 番目の単語に移動するには何文字を変更する必要があるかを計算します。編集距離のより複雑なバージョンは、電話やワープ​​ロのスペル自動修正アルゴリズムで一般的に使用され、修正候補を見つけます。

2 つの単語は、1 行に 1 つの単語でユーザーから読み取られる必要があります。例えば:

Word 1: hello
Word 2: jelly
2

これが私が得たすべてです:

w1 = input('Word 1: ')
w2 = input('Word 2: ')
for i in w1:
  for o in w2:
    print(i, o)

どうすればいいですか?

4

4 に答える 4

6

次のようなものを試すことができます:

sum(c1 != c2 for c1,c2 in zip(w1,w2))

zip(w1,w2)w1との対応する文字からなるタプルを返すジェネレータを作成しますw2。すなわち:

>>> list(zip(w1,w2))
[('h', 'j'), ('e', 'e'), ('l', 'l'), ('l', 'l'), ('o', 'y')]

これらのタプルを反復処理し (c1最初の各文字と 2 番目の各文字に割り当てられますc2)、チェックしますc1 != c2。この条件が満たされるすべてのインスタンスを合計して、答えを導き出します。

(zip()およびを参照sum())


>>> w1 = 'hello'
>>> w2 = 'jelly'
>>> 
>>> sum(c1 != c2 for c1,c2 in zip(w1,w2))
2
于 2013-08-16T15:11:34.170 に答える
3

difflib の使用:

>>> import difflib
>>> w1, w2 = 'hello', 'jelly'
>>> matcher = difflib.SequenceMatcher(None, w1, w2)
>>> m = sum(size for start, end, size in matcher.get_matching_blocks())
>>> n = max(map(len, (w1, w2))) # n = len(w1)
>>> n - m
2
于 2013-08-16T15:12:25.740 に答える
2

機能的アプローチ:

>>> from itertools import starmap
>>> from operator import ne
>>> sum(starmap(ne, zip(word1, word2)))
2
于 2013-08-16T15:12:30.783 に答える