2017-05-09 9 views
0

2つのリスト(ソート済み)のリストがあり、元のリストのどの要素が出力され、どの要素が追加されたのかをPythonで比較したい。2つのリストと出力の不足と余分な要素(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つのリストを比較し、リスト1_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は、これはcommまたはdiffを用いて達成することができます。

リストが既にソートされている場合、comm list1_original.txt list2.txtは、両方のリストに共通するものを含むもの、list1_original.txtにのみ見つかるもの、list2.txtにあるものの3つの列を出力します。 -1,-2、および-3のパラメータを使用して、特定の列の出力を抑制することができます。

もちろん、いつでもjusg 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] 
関連する問題