我有兩個列表如下所示。我知道我可以使用set(list1)--set(list2)或反之亦然打印與其他對應的列表不同的列表。但是,我不希望將完整列表打印出來,我只是希望修改列表中的那部分內容。使用Python的列表列表的差異
例如,列表1:
[['Code', 'sID', 'dID', 'cID', 'ssID'], ['ABCD-00', 'ABCD-00-UNK', '358', '1234', '9999'], ['ABCD-01', 'ABCD-00-UNK', 160, '993', '587']]
列表2:
[['Code', 'sID', 'dID', 'cID', 'ssID', 'AddedColumn'], ['ABCD-00', 'ABCD-00-UNK', '358', '1234', '9999', 'AddedValue1'], ['ABCD-01', 'ABCD-00-UNK', 160, '993', 'ChangedValue', 'AddedValue2']]
如果我不差集,它打印出整個列表。當'Code','sID'相同時,我希望輸出只顯示不同/添加/帶走的列。
每個列表的第一個列表是標題。所以我想比較'Code','sID'列中的值匹配時的列表。
所需的輸出:
3210這樣的事情或任何簡單的是罰款也。
我已經試過代碼:
from difflib import SequenceMatcher
matcher = SequenceMatcher()
for a, b in zip(list1, list2):
matcher.set_seqs(a, b)
for tag, i1, i2, j1, j2 in matcher.get_opcodes():
if tag == 'equal': continue
print('{:>7s} {} {}'.format(tag, a[i1:i2], b[j1:j2]))
它運作良好,在比較對應列表,即子列表1中,在列表2子列表1列表1。但是我希望它能夠在整個列表中進行比較,因爲如果缺少特定的子列表,它會顯示所有內容都不相同。通過子列表我的意思是,例如列表1中的['Code', 'sID', 'dID', 'cID', 'ssID']
是子列表1。
你真的不能做「set(...) - set(...)」的事情:列表是可變對象,不能被設置成員 – jsbueno 2015-02-10 18:20:06
你堅持使用列表和特定格式嗎?這看起來不太好。 – user3467349 2015-02-10 18:20:22
@jsbueno我把它們改成了集合,我沒有在這個問題中加入。 – abn 2015-02-10 18:20:57