2017-05-25 211 views
1

我有类似以下内容(我有元组的元组的方便转换后的元组,这样set可以得到独特元素的列表。独特的名单列表的元素

mylist = ((('pen','pineapple'),('apple','pen')),(('pineapple','pen')),(('apple','pen'),('pen','pineapple'))) 
set(mylist) 

>>> 
{(('pen', 'pineapple'), ('apple', 'pen')), 
('pineapple', 'pen'), 
(('apple', 'pen'), ('pen', 'pineapple'))} 

然而,元素('apple', 'pen'), ('pen', 'pineapple') == ('pen', 'pineapple'), ('apple', 'pen')为。据我的应用程序而言是否有一个快速python方法来获取不顾要素的顺序的独特元素

编辑1: (('pen', 'apple'), ('pen', 'pineapple')) != (('apple', 'pen'), ('pen', 'pineapple'))即我不想重新最里面的元组:正如评论指出。但是,可以放弃愤怒元组的中间层次。

顺便说一句,我希望有点pythonic(或fancier)比使用排序,然后使用set

+0

为什么没有'设置()'满足您的需求? –

+0

查看输出结果,它将'(('''''''''',''''''''))'作为另一个元素吐出来。正如所说的,它相当于'(('pen','pineapple'),('apple','pen'))'。 –

+4

@StephenRauch因为'(A,B)'与'(B,A)'不同,所以'set()'同时接受。 –

回答

3

制作一组套。集只能包含一个不可改变的对象,所以你必须给每一个元组转换为frozenset然后做一套出来的:

In [4]: set(map(frozenset, mylist)) 
Out[4]: 
{frozenset({('apple', 'pen'), ('pen', 'pineapple')}), 
frozenset({'pen', 'pineapple'})}