将具有相同值的列表中的元组合并

Combine tuples in a list which have the same value

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

L ={(1,2), (1,4), (1,3), (2,3), (3,4), (3,5), (4,5), (6,7)}

我尝试将这些组合起来以获得等价性 类(合并具有相同值的元组,例如 (1,2) 和 (2,3) 变为 (1,2,3))。所以你得到:

EQ = {(1,2,3,4,5), (6,7)}

在 Python 中完成此操作的最简单方法是什么?

您可以使用以下递归函数。首先,您可以将元素转换为 set 并遍历集合并使用 if 之后的元素检查任何元素,当您找到具有任何交集(v & k)的元素时,您将集合合并并删除列表中的第二个元素并更新主列表:

L ={(1,2), (1,4), (1,3), (2,3), (3,4), (3,5), (4,5), (6,7)}
s=[set(i) for i in L if i]

def find_intersection(m_list):
    for i,v in enumerate(m_list) : 
        for j,k in enumerate(m_list[i+1:],i+1):  
           if v & k:
              s[i]=v.union(m_list.pop(j))
              return find_intersection(m_list)
    return m_list


print find_intersection(s)

结果:

[set([1, 2, 3, 4, 5]), set([6, 7])]
[Finished in 0.0s]

请注意,在第二个 enumerate 函数中,我使用 i+1 作为索引 m_list[i+1:] 的起始编号,因为 k (j) 的索引等于 k ​​的索引在主列表中。