选择列表列表的子列表以定义关系

时间:2018-09-21 00:29:17

标签: python-3.x list loops for-loop sublist

如果我碰巧有以下列表列表:

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)])

作为“关系”列表中的一个元素。

我希望有一种最佳方法,因为在原始情况下,我必须处理更大的列表列表。

给予的任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

您确实没有提供足够的信息,所以无法告诉您是否需要itertools.combinations()itertools.permutations()。您的示例可用于itertools.combinations,因此将使用它。

如果xy是列表中的两个元素,那么您只希望出现set(x).issubset(y)且集合差异大小为<= 1-{{ 1}},例如:

len(set(y) - set(x)) <= 1