如何使用 Python 从长嵌套列表中删除短列表,即使项目不连续?

how to delete the short lists from a long nested list even the items are not continuous using Python?

例如:

t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

如果项目包含在一个长列表中,即使项目不连续,我也想删除短列表。所以,我希望结果是:

[[1, 2, 3, 4, 5, 6],[6,7]]

我可能自己想出来,但我的方法不够聪明。有人可以帮我吗?

我的做法很简单

  1. 我检查了最后一个元素是否已经存在于我们的较长列表中。如果我们出现,那么我们不需要添加到更长的列表,如果不是这样,那么我们将添加到更长的列表
sorted_lists=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

sorted_big_lists =[]
for sorted_list in sorted_lists:
    for test_list in sorted_big_lists:
        if sorted_list[-1] in test_list:
            break
    else:
        sorted_big_lists.append(sorted_list)
  
print(sorted_big_lists)

因为列表中的所有元素都是唯一的,而且我喜欢使用集合 这是我的代码。还没有检查它的效率,但它看起来更干净 :D

t = [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

t = [set(l) for l in t]
t = [list(x) for x in t if not any([x.issubset(y) for y in t if x != y])]

从小到大排序,将它们设为集合,然后将它们从列表中弹出,以减少每次计算的列表大小。

t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]

t = sorted(t, key=lambda x: len(x))
t = [set(x) for x in t]
for i in range(len(t)):
    a = t.pop(0)
    if not any([a.issubset(x) for x in t]):
        print(a)