2017-10-06 52 views
0

我有一个元组列表,每个元组包含2个整数。 例如。 [(1, 2), (2, 3), (3, 4), (4, 5), (100, 130), (130, 140), (140, 150), (150, 170)]如何找到python中相同的元组列表中的所有元素?

如何找到相同的元素? 这里,在这个例子中1和2是相同的; 2和3是相同的;所以1和3也是一样的。 回答上面的例子是:

1,2,3,4,5 

100,130,140,150,170 

如果答案是列表的列表,我宁愿,但适用于任何解决办法是罚款。

+0

当你说 “在本实施例1和2是相同的; 2和3是相同的;所以1和3也是同样的”,是这种先前的知识,并以某种方式存储?基本上,这些“相同”的关系是存储/给定的吗? –

+0

每个元组有两个整数。我正在做一些图像处理工作,我必须将图像分成区域,并为每个区域分配整数值。一个元组中的两个值意味着这两个区域是相同的。所以在上面的例子中,会有两个区域,一个是数字1,2,3,4,5,另一个是100,130,140,​​150,170。 – siddharth

回答

1

假设(如果你在的地方(1, 2)(2, 1)所以例如,它不会有所作为)元组内的元素的位置并不重要,我想你需要什么disjoint-set merge,也被称为“联盟-找”。基本上,你可以遍历您的元组

for t1, t2 in list_of_tuples: 

,并为每一个,使得在数据结构对应于每个元素的集合,如果它不存在

disjoint_set_structure.make_set(t1) 
    disjoint_set_structure.make_set(t2) 

然后统一两套

disjoint_set_structure.union(t1, t2) 

在最后你将能够从disjoint_set_structure得到不同的群体,如果您的实现支持它。

有很多implementations of the disjoint-set data structure available online,你也可以很容易地创建自己的约50行代码。

0

David Z提供了一个很好的解决方案来解决类似于您的更复杂的问题。但我正确理解你的问题,David Z的回答对你的问题有点矫枉过正。您不需要定义任何新的类或数据结构。

我认为你需要做的只是把你拥有的每一个数字放到一个集合中。因为一个集合不能有任何重复的元素,所以这个过程实际上找到了相同的元素。如下面的代码:

list_of_tuples=[(1, 2), (2, 3), (3, 4), (4, 5), (100, 130), (130, 140), (140, 150), (150, 170)] 
ans=set() 
for t in list_of_tuples: 
    for num in t: 
     ans.add(num) 
print(list(ans)) 
+0

我认为OP希望1,2,3,4,5和100,130,140,​​150,170在一个单独的列表中,而不是单个列表中。 –

0

从问题中不太清楚你喜欢结果。

你确实提到你想要一个列表清单,但没有指定创建它的标准。

如果你更新的标准是结果在多个列表分割,建立名单的名单你的问题,我会尝试更新这个答案

这里是一个班轮产生一个单列出结果。

给出:

tuples_v = [(1, 2), (2, 3), (3, 4), (4, 5), (100, 130), (130, 140), (140, 150), (150, 170)] 

结果:

result = list(set([value_v for tuple_v in tuples_v for value_v in tuple_v])) 
相关问题