比较python中的两个字符串?

时间:2013-08-16 15:07:23

标签: python python-3.x

以下是问题:

给出两个单词中字母数相同的单词,计算出需要更改多少个字母才能从第一个单词到第二个单词。编辑距离的更复杂版本通常用于在手机和文字处理器上拼写自动校正算法以找到候选校正。

应该从用户读取两个单词,每行一个单词。例如:

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 个答案:

答案 0 :(得分:5)

您可以尝试以下内容:

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

zip(w1,w2)创建一个生成器,返回由w1w2的相应字母组成的元组。即:

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

我们迭代这些元组(c1被分配给每个第一个字符,c2被分配给每个第二个字符,并检查是否c1 != c2。我们将满足此条件的所有实例相加,以得出答案。

(请参阅zip()sum()


>>> w1 = 'hello'
>>> w2 = 'jelly'
>>> 
>>> sum(c1 != c2 for c1,c2 in zip(w1,w2))
2

答案 1 :(得分: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

答案 2 :(得分:2)

功能性方法:

>>> from itertools import starmap
>>> from operator import ne
>>> sum(starmap(ne, zip(word1, word2)))
2

答案 3 :(得分:1)

如果单词的长度始终相同,您可以使用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)