我正在尝试找到解决此问题的最快方法,比如我有一个列表列表:
myList = [[1,2,3,4,5],[2,3],[4,5,6,7],[1,2,3],[3,7]]
我希望能够删除作为其他列表之一的子列表的所有列表,例如我想要以下输出:
myList = [[1,2,3,4,5],[4,5,6,7],[3,7]]
列表[2,3]和[1,2,3]被删除,因为它们完全包含在其他列表中,而[3,7]未被删除,因为没有一个列表包含所有这些元素
我不限于任何一种数据结构,如果列表或集合列表更容易使用,那也没关系。
我能想出的最好的东西是这样的,但它并没有真正起作用,因为我试图在迭代它时从列表中删除。我试图把它复制到一个新的列表中但不知何故我无法正常工作。
for outter in range(0,len(myList)):
outterSet = set(myList[outter])
for inner in range(outter,len(myList)):
innerSet = set(myList[inner])
if innerSet.issubset(outterSet):
myList.remove(innerSet)
感谢。
答案 0 :(得分:3)
解决问题的关键是集合列表:
lists = [[1,2,3,4,5],[2,3],[4,5,6,7],[1,2,3],[3,7]]
sets = [set(l) for l in lists]
new_list = [l for l,s in zip(lists, sets) if not any(s < other for other in sets)]
这会将内部列表转换为集合,将每个集合与每个其他集合进行比较以查看它是否包含在其中(使用<
运算符),如果它未严格包含在另一个集合中,则添加原始列表到新的列表列表。