2015-05-26 68 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