2017-10-06 176 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])) 
相關問題