我列出了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个列表并输出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
答案 0 :(得分:4)
如果给定列表中没有重复项,您可以使用集合及其“ - ”运算符:
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']
答案 1 :(得分:0)
我知道你提到了Python,但是FWIW,如果这只是一个实用程序脚本,可以使用comm
或diff
完成。
如果您的列表已经排序,comm list1_original.txt list2.txt
将输出三列,一列用于包含两个列表共有的内容,一列包含仅在list1_original.txt
中找到的内容,另一列包含仅在list2.txt
。您可以使用-1
,-2
和-3
参数(分别)来抑制某些列的输出。
当然,你总是可以jusg diff -u list1_original.txt list2.txt
。
如果你真的想在Python中这样做,你可能会对difflib
好运。我从来没有真正使用它,所以我猜测。
答案 2 :(得分: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]
答案 3 :(得分:0)
This will work regardless duplicate values without sorted().
>>> def finder(arr1,arr2):
for i in range(len(arr1)):
if arr1[i] not in arr2:
print("missing",arr1[i])
for j in range(len(arr2)):
if arr2[j] not in arr1:
print("added",arr2[j])