2016-05-10 142 views
0

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

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

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

所有我至今是:

高清differencecount(A,B): 计数器= 0 str1 = list(A) str2 = list(B) for str1中的字母: if letter == str2: counter = counter + 1 返回计数器

所有这些都会返回0,尽管如此我觉得我错过了一些东西。

+0

如果x和y的长度不同,会发生什么?什么是预期的输出? –

+0

我正在考虑添加len(x)= len(y)以确保它们的长度相等。如果它们的长度不相等,我可能会在最后添加一个“请输入等长字符串”。 – Pichu2016

回答

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 
+0

不知道这是一个好主意,为他们做这个人的功课:/ – Ownaginatious

+0

我从来没有学过什么邮编..我不知道它是如何工作的。 – Pichu2016

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')] 

所以需要从每个串和对它们一起相同位置处的字符。所以你只需要计算有多少对是不同的。这可以通过使用列表理解来创建一个列表,使用那些相同的过滤出来的列表,然后获取该列表的长度。

+0

我从来没有学过什么邮编..它是如何工作的? – Pichu2016

+2

@ Pichu2016:我在答案中没有解释过吗?查看[documentation](https://docs.python.org/3/library/functions.html#zip)了解更多详情。 – mhawke

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长度不同,这就是你想在你的评论。