2017-02-05 158 views
0

從這個數據結構:[(1,2),(1,3),(1,4),(1,5)]我打算獲取唯一的值,或[1,2,3,4,5]。這裏有什麼簡單的解決方案?元組對的唯一唯一值?

+0

是使用中間集好嗎? – Nic

回答

3

您可以使用set與列表理解:

lst = [(1,2),(1,3),(1,4),(1,5)] 

set(j for i in lst for j in i) 
# {1, 2, 3, 4, 5} 
+0

這是解決這個問題的第一個也是最簡單的/ pythonic的方法。很好的答案。 –

+2

你也可以使用一個理解:「{i爲i中的i,i中的j}」。 :) – MSeifert

1

使用來自itertools模塊的chain.from_iterable。它通常被認爲是扁平2D迭代的慣用方式,而不是嵌套列表理解。請參閱this問題。

>>> from itertools import chain 
>>> set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)])) 
{1, 2, 3, 4, 5} 

chain.from_iterable平展列表和set保持唯一的值。

要轉換回列表,只需傳遞給list構造函數。

>>>list(set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)]))) 
[1, 2, 3, 4, 5] 
0

在您的預期輸出的唯一元素的順序是按照出場順序。這樣做將是一個方法(使用外部庫,但食譜是在itertools-recipes section繳費):

>>> from iteration_utilities import flatten, unique_everseen 

>>> x = [(1,2),(1,3),(1,4),(1,5)] 

>>> list(unique_everseen(flatten(x))) 
[1, 2, 3, 4, 5]