我搜索过并且没有找到与我相同的问题 . 我想从python中的列表列表中删除重复项;但是,我不关心列表中值的顺序 . 我这样做的方式目前太耗时了 .
我想做的事:
A = [[1,2,3] , [2,3,4] , [3,4,5] , [3,2,4]]
我想搜索A并删除所有重复项 . 这里的重复是[2,3,4]和[3,2,4] . 这将减少到:
smaller_A = [[1,2,3] , [2,3,4], [3,4,5]]
我目前是怎么做的:
todelete = []
for i in range(len(A)):
for j in range(i+1,len(A)):
if set(A[i]) == set(A[j]):
todelete.append(j)
todelete = sorted(set(todelete))
smaller_A= [A[i] for i in range(len(A)) if i not in todelete]
再次,这是有效的,但是当我的列表很大时,它非常耗时 . 有任何想法吗?谢谢!
2 回答
你可以通过这种方式进行排序
然后删除重复项
Frozensets非常适合这种情况,当你需要嵌套时:
要转换回列表,您可以执行以下操作:
这不会保留列表或其中的元素的顺序 . (虽然这里没有什么区别 . )
如果你确实需要保留顺序,你可以迭代
A
,同时跟踪到目前为止看到的frozensets:(这不是't optimized; ideally, you' d只调用
frozenset(x)
一次并将结果存储在变量中 . )