列表不可散列,元组are可散列的。然后你需要采取set
这些元组。但在这些元组内部,您需要忽略顺序。但一个集合的元组不可散列,因此您需要使用元组frozenset https://docs.python.org/3/library/stdtypes.html#frozenset对象:
uniques = {tuple(map(frozenset, i)) for i in doublegammas1}
print(uniques)
{(frozenset({('p', 'w'), ('r', 'u')}), frozenset({('t', 'q')})),
(frozenset({('p', 'w'), ('r', 'u')}), frozenset({('v', 'q')})),
(frozenset({('p', 'w'), ('r', 'u')}), frozenset({('v', 's')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('t', 's')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('t', 'q')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('v', 'q')})),
(frozenset({('p', 'u'), ('r', 'w')}), frozenset({('v', 's')})),
(frozenset({('p', 'w'), ('r', 'u')}), frozenset({('t', 's')}))}
然后您可以通过itertools unique_everseen recipe https://docs.python.org/3/library/itertools.html#itertools-recipes,也可以在第三方库中使用toolz.unique https://toolz.readthedocs.io/en/latest/api.html#toolz.itertoolz.unique or more_itertools.unique_everseen https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.unique_everseen:
from more_itertools import unique_everseen
def uniquekey(x):
return tuple(map(frozenset, x))
res = list(unique_everseen(doublegammas1, key=uniquekey))
print(res)
[[[('p', 'u'), ('r', 'w')], [('t', 'q')]],
[[('p', 'u'), ('r', 'w')], [('v', 'q')]],
[[('p', 'u'), ('r', 'w')], [('t', 's')]],
[[('p', 'u'), ('r', 'w')], [('v', 's')]],
[[('p', 'w'), ('r', 'u')], [('t', 'q')]],
[[('p', 'w'), ('r', 'u')], [('v', 'q')]],
[[('p', 'w'), ('r', 'u')], [('t', 's')]],
[[('p', 'w'), ('r', 'u')], [('v', 's')]]]
输入数据
# input data
doublegammas1 = [[[('p', 'u'), ('r', 'w')], [('t', 'q')]],
[[('p', 'u'), ('r', 'w')], [('v', 'q')]],
[[('p', 'u'), ('r', 'w')], [('t', 's')]],
[[('p', 'u'), ('r', 'w')], [('v', 's')]],
[[('p', 'w'), ('r', 'u')], [('t', 'q')]],
[[('p', 'w'), ('r', 'u')], [('v', 'q')]],
[[('p', 'w'), ('r', 'u')], [('t', 's')]],
[[('p', 'w'), ('r', 'u')], [('v', 's')]],
[[('r', 'u'), ('p', 'w')], [('t', 'q')]],
[[('r', 'u'), ('p', 'w')], [('v', 'q')]],
[[('r', 'u'), ('p', 'w')], [('t', 's')]],
[[('r', 'u'), ('p', 'w')], [('v', 's')]],
[[('r', 'w'), ('p', 'u')], [('t', 'q')]],
[[('r', 'w'), ('p', 'u')], [('v', 'q')]],
[[('r', 'w'), ('p', 'u')], [('t', 's')]],
[[('r', 'w'), ('p', 'u')], [('v', 's')]]]