列表列表的唯一元素

时间:2017-05-25 05:20:11

标签: python set

我有一个类似于以下的列表(我已经方便地转换了元组元组的元组,以便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'))。即我不想重新排列最里面的元组。但是,可以重新排列元组的中间级别。

顺便说一句,我希望得到的东西比使用排序然后使用set有点pythonic(或更高级)。

1 个答案:

答案 0 :(得分:4)

制作一套套装。集合只能包含不可变对象,因此您必须将每个元组转换为frozenset,然后从中创建一个集合:

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