在列表列表中删除带有常见项目的较小列表

时间:2018-11-08 17:32:09

标签: python list

我有一个这样的列表列表:

[[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

我要从中删除具有相同项目的较小列表。例如,以上列表的结果应为:

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]

由于[1, 2][2, 4, 6]具有共同的项目2,并且

len([2, 4, 6]) > len([1, 2])

如果没有可怕的嵌套for循环,我想不出一种方法。谢谢!

1 个答案:

答案 0 :(得分:5)

您可以执行以下操作:

data = [[1, 2], [2, 4, 6], [6, 9], [9, 10, 11], [11, 20], [20, 25, 30]]

result = []
for e in sorted(data, key=len, reverse=True):
    if not any(set(e).intersection(prev) for prev in result):
        result.append(e)

print(result)

输出

[[2, 4, 6], [9, 10, 11], [20, 25, 30]]