比较两个列表和输出缺失和额外元素(Python)

时间:2017-05-09 01:55:40

标签: 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个列表并输出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

4 个答案:

答案 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,如果这只是一个实用程序脚本,可以使用commdiff完成。

如果您的列表已经排序,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])