如何在多个列表之间查找不同的项目
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)
我想知道如何比较 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)