Cov*_*ich 12 python list unique set duplicates
我有一套套装:
L = [set([1, 4]), set([1, 4]), set([1, 2]), set([1, 2]), set([2, 4]), set([2, 4]), set([5, 6]), set([5, 6]), set([3, 6]), set([3, 6]), set([3, 5]), set([3, 5])]
Run Code Online (Sandbox Code Playgroud)
(实际上在我的情况下是一个倒数元组列表的转换)
我想删除重复项来获取:
L = [set([1, 4]), set([1, 2]), set([2, 4]), set([5, 6]), set([3, 6]), set([3, 5])]
Run Code Online (Sandbox Code Playgroud)
但如果我尝试:
>>> list(set(L))
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
要么
>>> list(np.unique(L))
TypeError: cannot compare sets using cmp()
Run Code Online (Sandbox Code Playgroud)
如何获得具有不同集合的集合列表?
the*_*eye 18
最好的方法是将您的集转换为frozensets(可以清除),然后使用它set来获取唯一的集合,如下所示
>>> list(set(frozenset(item) for item in L))
[frozenset({2, 4}),
frozenset({3, 6}),
frozenset({1, 2}),
frozenset({5, 6}),
frozenset({1, 4}),
frozenset({3, 5})]
Run Code Online (Sandbox Code Playgroud)
如果你希望他们为集,那么你可以将它们转换回到set就像这
>>> [set(item) for item in set(frozenset(item) for item in L)]
[{2, 4}, {3, 6}, {1, 2}, {5, 6}, {1, 4}, {3, 5}]
Run Code Online (Sandbox Code Playgroud)
如果您还希望维护订单,同时删除重复项,那么您可以collections.OrderedDict像这样使用
>>> from collections import OrderedDict
>>> [set(i) for i in OrderedDict.fromkeys(frozenset(item) for item in L)]
[{1, 4}, {1, 2}, {2, 4}, {5, 6}, {3, 6}, {3, 5}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |