2017-02-05 123 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]