2015-05-26 62 views
1

我被要求比較兩個不同的字符串並返回不匹配。如果一個字符串長於另一個字符串,請出來多餘的字符。如何比較兩個列表?

characters1=list(contents1) 
characters2=list(contents2) 
for (a,b) in zip(characters1, characters2):  
    if a != b: 
     print('Mismatch at character', characters1.index(a), a, '!=', b) 

這是我所做的,我無法弄清楚額外的部分。

+0

http://stackoverflow.com/questions/ 3462143 /獲得兩個列表之間的差異 – Maroun

+2

直接與問題無關,但如果在該字符串中看到不匹配的字符,'characters1.index(a)'將不會返回您期望的內容。 – bereal

+0

什麼是額外的部分? –

回答

0

比較它們的長度:

if len(a)>len(b): 
    print("a is longer than b by %s" % str(len(a)-len(b))) 
    print("Extra part is %s" % a[len(b):]) 
elif len(a)<len(b): 
    print("a is shorter than b by %s" % str(len(b)-len(a))) 
    print("Extra part is %s" % b[len(a):]) 
0
>>> a = "xyz" 
>>> b = "abcdef" 
>>> a[len(b):] or b[len(a):] 
'def' 

此外,作爲@bereal指出,characters1.index(a)不會像您期望的工作。你可以考慮使用enumerate

for i, (a, b) in enumerate(zip(characters1, characters2)):  
    if a != b: 
     print('Mismatch at character', i, ':', a, '!=', b) 
print('Extra string:', characters1[i+1:] or characters2[i+1:]) 
0

事情是這樣的:

if len(characters1) > len(characters2): 
    print('Extra characters1: ', characters1[len(characters2):]) 
elif len(characters2) > len(characters1): 
    print('Extra characters2: ', characters2[len(characters1):]) 
1

我會用itertools.izip_longest這裏,是這樣的:

for idx, (a, b) in enumerate(izip_longest(s1, s2)): 
    if a and b: 
     if a != b: 
      print 'Mismatch at {0}: {1} != {2}'.format(idx, a, b) 
    else: 
     suffix = (s1 if a else s2)[idx:] 
     print 'Extra string: {0}'.format(suffix) 
     break   

還要注意index()返回的第一入口該項目,這樣如果字符在字符串中重複,可能會返回錯誤的結果。 enumerate是要走的路。將字符串轉換爲列表也是多餘的,字符串已經可迭代了。

0

這顯示瞭如何比較兩個list S,並恰當地比較兩個相等長度的不同的字符串:

a = ['abc', 'def', 'ghi'] 
b = ['abc', 'ddf', 'ghij'] 

for x,y in zip(a, b): 
    if x!=y: 
     print(x, y, x[len(y):] if len(x)>len(y) else y[len(x):]) 

打印:

def ddf 
ghi ghij j