首页 > 解决方案 > 删除python列表中的冗余子列表

问题描述

大家好,我有一个列表值列表,例如:

list_of_values=[['A','B'],['A','B','C'],['D','E'],['A','C'],['I','J','K','L','M'],['J','M']]

我想保留在该列表中,只保留我拥有最高值的列表。

例如在sublist1['A','B'] AB也存在于 中sublist2 ['A','B','C'],所以我删除了sublist1. 对于sublist4. thesublist6也被删除,因为JM存在于更长的 中sublist5
最后我应该得到:

list_of_no_redundant_values=[['A','B','C'],['D','E'],['I','J','K','L','M']] 

其他例子 =

list_of_values=[['A','B'],['A','B','C'],['B','E'],['A','C'],['I','J','K','L','M'],['J','M']]

预期输出:

[['A','B','C'],['B','E'],['I','J','K','L','M']]

有人有想法吗?

标签: python-3.xlistduplicates

解决方案


mylist=[['A','B'],['A','C'],['A','B','C'],['D','E'],['I','J','K','L','M'],['J','M']]
def remove_subsets(lists):
    outlists = lists[:]
    for s1 in lists:
        for s2 in lists:
            if set(s1).issubset(set(s2)) and (s1 is not s2):
                outlists.remove(s1)
                break
    return outlists
print(remove_subsets(mylist))

这应该导致[['A', 'B', 'C'], ['D', 'E'], ['I', 'J', 'K', 'L', 'M']]


推荐阅读