如何找到python中相同的元组列表中的所有元素?
我有一个元组列表,每个元组包含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
如果答案是列表的列表,我宁愿,但适用于任何解决办法是罚款。
假设(如果你在的地方(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行代码。
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))
我认为OP希望1,2,3,4,5和100,130,140,150,170在一个单独的列表中,而不是单个列表中。 –
从问题中不太清楚你喜欢结果。
你确实提到你想要一个列表清单,但没有指定创建它的标准。
如果你更新的标准是结果在多个列表分割,建立名单的名单你的问题,我会尝试更新这个答案
这里是一个班轮产生一个单列出结果。
给出:
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]))
当你说 “在本实施例1和2是相同的; 2和3是相同的;所以1和3也是同样的”,是这种先前的知识,并以某种方式存储?基本上,这些“相同”的关系是存储/给定的吗? –
每个元组有两个整数。我正在做一些图像处理工作,我必须将图像分成区域,并为每个区域分配整数值。一个元组中的两个值意味着这两个区域是相同的。所以在上面的例子中,会有两个区域,一个是数字1,2,3,4,5,另一个是100,130,140,150,170。 – siddharth