我需要一种有效的算法来将具有重复项的列表合并到1个列表中。列表中有相同的Exat项目,但顺序不同。而且它们都在一个大列表内。
例如:[[1,2,3],[3,2,1],[2,1,3],[4,5],[5,4],[6]]
输出应为:[[1,2,3],[4,5],[6]]
我有这段代码,但是当我迭代列表并删除项目时,索引超出范围:
biglist = [ [1,2,3],[3,2,1],[2,1,3],[4,5],[5,4],[6] ]
for i in range(len(biglist)):
temp = set(biglist[i])
for j in range(i,len(biglist)-1):
temp2 = set(biglist[j])
if(temp == temp2):
del biglist[j]
最佳答案
一种解决方案是排序,然后将biglist
中的列表转换为元组,set()
然后将允许删除重复项。
def remove_dups(a):
return list(map(list, set(map(tuple, map(sorted, a)))))
print (remove_dups(biglist))
# [[4, 5], [6], [1, 2, 3]]