簡體   English   中英

如何比較兩個列表?

[英]How can I compare two lists?

我被要求比較兩個不同的字符串並返回不匹配項。 如果一個字符串比另一個字符串長,請列出多余的字符。

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)

這是我所做的,我無法弄清楚多余的部分。

我會在這里使用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()返回該項目的第一個入口,因此如果字符在字符串中重復,則可能返回錯誤的結果。 列舉是要走的路。 將字符串轉換為列表也是多余的,字符串已經可以迭代了。

比較它們的長度:

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

像這樣:

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

這顯示了如何比較兩個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM