从列表中获取唯一的元组
Getting unique tuples from a list
我有一个元组列表,其元素如下:
aa = [('a', 'b'), ('c', 'd'), ('b', 'a')]
我想将 ('a', 'b') and ('b', 'a')
视为同一组,并且只想提取唯一的元组。所以输出应该是这样的:
[('a', 'b'), ('c', 'd')]
我的列表由数百万个这样的元组组成,如何才能有效地实现这一点?
转换为 frozenset
、散列并检索:
In [193]: map(tuple, set(map(frozenset, aa))) # python2
Out[193]: [('d', 'c'), ('a', 'b')]
这里有一个更易读的列表理解版本:
In [194]: [tuple(x) for x in set(map(frozenset, aa))]
Out[194]: [('d', 'c'), ('a', 'b')]
请注意,对于您的特定用例,元组列表并不是数据结构的最佳选择。考虑将您的数据存储为一个集合?
In [477]: set(map(frozenset, aa))
Out[477]: {frozenset({'a', 'b'}), frozenset({'c', 'd'})}
给定顺序无关紧要,只需转换为 set
和 frozenset
,这似乎比 list
和 tuple
更适合数据结构,例如:
>>> {frozenset(x) for x in aa}
{frozenset({'c', 'd'}), frozenset({'a', 'b'})}
我有一个元组列表,其元素如下:
aa = [('a', 'b'), ('c', 'd'), ('b', 'a')]
我想将 ('a', 'b') and ('b', 'a')
视为同一组,并且只想提取唯一的元组。所以输出应该是这样的:
[('a', 'b'), ('c', 'd')]
我的列表由数百万个这样的元组组成,如何才能有效地实现这一点?
转换为 frozenset
、散列并检索:
In [193]: map(tuple, set(map(frozenset, aa))) # python2
Out[193]: [('d', 'c'), ('a', 'b')]
这里有一个更易读的列表理解版本:
In [194]: [tuple(x) for x in set(map(frozenset, aa))]
Out[194]: [('d', 'c'), ('a', 'b')]
请注意,对于您的特定用例,元组列表并不是数据结构的最佳选择。考虑将您的数据存储为一个集合?
In [477]: set(map(frozenset, aa))
Out[477]: {frozenset({'a', 'b'}), frozenset({'c', 'd'})}
给定顺序无关紧要,只需转换为 set
和 frozenset
,这似乎比 list
和 tuple
更适合数据结构,例如:
>>> {frozenset(x) for x in aa}
{frozenset({'c', 'd'}), frozenset({'a', 'b'})}