如果我碰巧有以下列表列表:
L=[[(1,3)],[(1,3),(2,4)],[(1,3),(1,4)],[(1,2)],[(1,2),(1,3)],[(1,3),(2,4),(1,2)]]
我想做的是,通过以下方式在列表之间建立关系:
我想说
[(1,3)] and [(1,3),(1,4)]
是相关的,因为第一个是第二个的子列表,但是随后我想将此关系添加到列表中,如下所示:
Relations=[([(1,3)],[(1,3),(1,4)])]
但是,我们也可以看到:
[(1,3)] and [(1,3),(2,4)]
是相关的,因为第一个是第二个的子列表,所以我希望这也是添加到“关系”列表中的一个关系:
Relations=[([(1,3)],[(1,3),(1,4)]),([(1,3)],[(1,3),(2,4)])]
我唯一要注意的是,如果它们仅相差一个元素,则我正在考虑将列表作为另一个的子列表。换句话说,我们不能拥有:
([(1,3)],[(1,3),(2,4),(1,2)])
作为我的“关系”列表中的一个元素,但我们应该具有:
([(1,3),(2,4)],[(1,3),(2,4),(1,2)])
作为“关系”列表中的一个元素。
我希望有一种最佳方法,因为在原始情况下,我必须处理更大的列表列表。
给予的任何帮助都非常感谢。
答案 0 :(得分:1)
您确实没有提供足够的信息,所以无法告诉您是否需要itertools.combinations()
或itertools.permutations()
。您的示例可用于itertools.combinations
,因此将使用它。
如果x
和y
是列表中的两个元素,那么您只希望出现set(x).issubset(y)
且集合差异大小为<= 1
-{{ 1}},例如:
len(set(y) - set(x)) <= 1