如何找到python中相同的元组列表中的所有元素?

时间:2017-10-06 04:25:23

标签: python python-2.7 python-3.x

我有一个元组列表,每个元组包含2个整数。 例如。 [(1, 2), (2, 3), (3, 4), (4, 5), (100, 130), (130, 140), (140, 150), (150, 170)]

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

1,2,3,4,5

100,130,140,150,170

如果答案是列表清单,我更愿意,但任何有效的解决方案都可以。

3 个答案:

答案 0 :(得分:1)

假设元素在元组中的位置无关紧要(例如,如果你用(2, 1)代替(1, 2),那么它就没有区别了),我认为你需要的是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行代码中轻松创建自己的代码。

答案 1 :(得分:0)

David Z提供了一个出色的解决方案来解决与您类似的更复杂的问题。但我理解你的问题,大卫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))

答案 2 :(得分: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]))