2017-05-09 61 views
0

我有2個列表(排序)的前綴,並希望在Python中進行比較,以便我可以輸出原始列表中丟失了哪些元素以及哪些元素已添加。比較兩個列表並輸出缺失和額外的元素(Python)

例如,

list1_original = ['1.1.1.1/24','2.2.2.2/24','3.3.3.3/24','4.4.4.4/24'] 
list2 = ['3.3.3.3/24','4.4.4.4/24','5.5.5.5/24','6.6.6.6/24'] 

我想比較2個列表並輸出list1_original中的add/remove元素。即:

1.1.1.1/24, 2.2.2.2/24 = missing 
5.5.5.5/24, 6.6.6.6/24 = added 
+1

多少精力,放在? – bigbounty

+1

如何使用['set'](https://docs.python.org/3/library/stdtypes.html#set)?特別是['set.difference'](https://docs.python.org/3/library/stdtypes.html#set.difference)或['set - set'](https://docs.python.org/ 3/library/stdtypes.html #set.difference) – falsetru

+1

或設置對稱差異。 –

回答

1

如果在給定的列表,你可以使用集和它們沒有重複「 - 」運營商:

list1 = ['1.1.1.1/24', '2.2.2.2/24', '3.3.3.3/24', '4.4.4.4/24'] 
list2 = ['3.3.3.3/24', '4.4.4.4/24', '5.5.5.5/24', '6.6.6.6/24'] 

set1 = set(list1) 
set2 = set(list2) 

missing = list(sorted(set1 - set2)) 
added = list(sorted(set2 - set1)) 

print('missing:', missing) 
print('added:', added) 

此打印

missing: ['1.1.1.1/24', '2.2.2.2/24'] 
added: ['5.5.5.5/24', '6.6.6.6/24'] 
+0

這很簡單,很好..... – Michael

0

我知道你提到的Python,但FWIW,如果這僅僅是一個實用程序腳本,這可以用commdiff完成。

如果你的列表已經排序,comm list1_original.txt list2.txt將輸出三列,一個包含常見的兩種名單的事情,一個用的東西只在list1_original.txt和一個只在list2.txt發現過的東西。您可以分別使用參數-1-2-3來限制輸出某些列。

當然,你總是可以證明diff -u list1_original.txt list2.txt

如果你真的想在Python中做到這一點,你可能會與difflib祝你好運。但我從來沒有真正使用它,所以我在猜測。

0

您可以使用一個循環和一些有條件的得到的結果聲明。

list1 = ['1.1.1.1/24', '2.2.2.2/24', '3.3.3.3/24', '4.4.4.4/24'] 
list2 = ['3.3.3.3/24', '4.4.4.4/24', '5.5.5.5/24', '6.6.6.6/24'] 

for i in list1: 
    if i in list2: 
     print("added",i) 
    else: 
     print("missing",i) 

missing 1.1.1.1/24 
missing 2.2.2.2/24 
added 3.3.3.3/24 
added 4.4.4.4/24 

同樣的事情也可以被陷害像這樣,

[print("added",i) if i in list2 else print("missing",i) for i in list1]