mlR*_*cks 5 python unique set python-2.7
我有一个元组列表,其元素是这样的:
aa = [('a', 'b'), ('c', 'd'), ('b', 'a')]
Run Code Online (Sandbox Code Playgroud)
我想('a', 'b') and ('b', 'a')
作为同一组处理,并希望只提取唯一的元组.所以输出应该是这样的:
[('a', 'b'), ('c', 'd')]
Run Code Online (Sandbox Code Playgroud)
我如何有效地实现这一点,因为我的列表包含数百万个这样的元组?
转换为a frozenset
,hash和retrieve:
In [193]: map(tuple, set(map(frozenset, aa))) # python2
Out[193]: [('d', 'c'), ('a', 'b')]
Run Code Online (Sandbox Code Playgroud)
这是一个稍微易读的版本,具有列表理解:
In [194]: [tuple(x) for x in set(map(frozenset, aa))]
Out[194]: [('d', 'c'), ('a', 'b')]
Run Code Online (Sandbox Code Playgroud)
请注意,对于您的特定用例,元组列表不是数据结构的最佳选择.考虑将数据存储为一组开始?
In [477]: set(map(frozenset, aa))
Out[477]: {frozenset({'a', 'b'}), frozenset({'c', 'd'})}
Run Code Online (Sandbox Code Playgroud)