如何在多个列表之间查找不同的项目

How to find different items between mulitiple lists

我想知道如何比较 n 列表以找到不同的项目。

例如,考虑列表:


list_l = [[1,2,3,4,5,100], 
          [1,2,31,41,51], 
          [10,2,3,45,25],  
          [4,20,3,4,12,51,200]
         ]

list_l 中每个列表的每个项目都是唯一的。例如列表 [1,2,3,4,5,100] 没有重复元素。列表 [1,2,31,41,51] 也是如此...


find_differences(list_l)

预期产出

res = [[5, 100], [31, 41], [10, 45, 25], [20, 12, 200]]
[5, 100] # elements of this list appears only in list [1,2,3,4,5,100]
[31, 41] # elements of this list appears only in list [1,2,31,41,51]
[10, 45, 25] # same here
[20, 12, 200] # same here

这个例子只有 4 个列表和很少的项目。但是,我的用例有更多的列表,每个列表包含数百个项目。

使用 set 函数给出输入列表之间的 list 差异。但是,生成的列表无法区分哪个项目最初属于哪个列表。

非常感谢任何帮助!

Python 具有交集和差集 属性。

s1 = set([1,2,3,4,5,100])
s2 = set([1,2,31,41,51])
s1.difference(s2)

使用这个你可以做你想做的事!

我有点担心这是作业题,所以我认为在这里详细阐述没有意义。

这是我的问题的解决方案。

results = []
for init_list in list_l:
    temp = []
    for e in init_list:
        unique_item = True
        for each_list in list_l:
            # Check if e is not unique, and if init_list and each_list are not the same list    
            if e in each_list and init_list != each_list:
                unique_item = False
                break
                
        # concatenate all unique items of a list
        if unique_item:
            temp.append(e)

    results.append(temp)

如问题中所述,使用了 set-theoretical 方法。由于未指定,最终子列表未排序。

list_l = # from above

n = set(range(len(list_l)))
list_new = []
for i in range(len(list_l)):
    unique_entries = set(list_l[i]).difference(sum(map(list_l.__getitem__, n.difference({i})), []))
    list_new.append(list(unique_entries))

print(list_new)