2017-05-25 210 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'})}