[英]Comparing two strings in python?
這是問題:
給定兩個單詞,每個單詞具有相同的字母數,計算出從第一個單詞到第二個單詞需要更改的字母數量。 編輯距離的更復雜版本通常用於在電話和文字處理器上拼寫自動更正算法中以查找候選更正。
應該從用戶那里讀取兩個單詞,每行一個單詞。 例如:
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)
我該怎么做呢?
您可以嘗試如下操作:
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
分配給每個第一個字符,將c2
分配給每個第二個字符),然后檢查c1 != c2
。 我們將滿足此條件的所有實例加起來得出答案。
>>> w1 = 'hello'
>>> w2 = 'jelly'
>>>
>>> sum(c1 != c2 for c1,c2 in zip(w1,w2))
2
使用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
功能方法:
>>> from itertools import starmap
>>> from operator import ne
>>> sum(starmap(ne, zip(word1, word2)))
2
如果單詞的長度始終相同,則可以使用zip一次遍歷兩個列表:
w1 = input('Word 1: ')
w2 = input('Word 2: ')
changes=0
for i, o in zip(w1, w2):
if i != o:
changes+=1
print "Changes needed: "+str(changes)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.