比较Python中的2个字符串

时间:2016-05-10 00:10:10

标签: python string

所以,我需要弄清楚一个程序,当你输入两个相同长度的不同字符串时,它将返回not print两个字符串之间的差异数。角色的顺序也很重要。

例如,如果您输入("abcdef", "aabccf") 它应该返回4.

("abcdef", "accddf")应返回2.

到目前为止,我所拥有的只是:

def differencecount(A,B):     counter = 0     str1 = list(A)     str2 = list(B)     对于str1中的字母:         如果字母== str2:             counter = counter + 1     返回柜台

所有这一切都是返回0,所以我觉得我错过了什么。

3 个答案:

答案 0 :(得分:2)

我会用

def difference(word_one, word_two):
    return sum(l1 != l2 for l1, l2 in zip(word_one, word_two))

哪个像

一样
>>> difference('abcdef', 'abcdef')
0
>>> difference('abcdef', 'abcabc')
3

答案 1 :(得分:1)

您可以zip将字符串放在一起,然后计算有多少对不同的对:

def chardifferencecounter(x, y):
    return len([1 for c1, c2 in zip(x, y) if c1 != c2])

>>> chardifferencecounter('abcdef', 'aabccf')
4
>>> chardifferencecounter('abcdef', 'accddf')
2

<强>解释

将字符串压缩在一起会产生以下结果:

>>> s1 = 'abcdef'
>>> s2 = 'aabccf'
>>> zip(s1, s2)
[('a', 'a'), ('b', 'a'), ('c', 'b'), ('d', 'c'), ('e', 'c'), ('f', 'f')]

因此它从每个字符串中的相同位置获取一个字符并将它们组合在一起。所以你只需要计算有多少对不同。这可以使用列表推导来创建一个列表,其中包含那些被过滤掉的对,然后获取该列表的长度。

答案 2 :(得分:0)

只是为了一个不同的外观,这是一个不使用zipenumerate的解决方案:

def chardifferencecounter(x,y):
    if len(x) != len(y):
        raise Exception('Please enter strings of equal length')
    return sum(x[i] != y[i] for i in range(len(x)))

请注意,当xy长度不同时,此解决方案也会引发异常,这正是您在评论中所希望的。