2016-05-10 187 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長度不同,這就是你想在你的評論。