将列表与一个大列表中的重复项合并

2024-10-04 01:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个有效的算法来合并列表与重复的项目到1个名单。列表中有相同的excat项,但顺序不同。他们都在一个大名单里。 示例:[[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]

Tags: 项目in算法示例列表forlen顺序
3条回答

一种解决方案是对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]]

试试这个:

import itertools
biglist = [ [1,2,3],[3,2,1],[2,1,3],[4,5],[5,4],[6] ]
sort_l = [sorted(i) for i in biglist]
list(k for k,_ in itertools.groupby(sort_l))

解释在代码注释中。你知道吗

试试这个:

big_list = [ [1,2,3],[3,2,1],[2,1,3],[4,5],[5,4],[6] ]
temp_list = []

#for every small list in the big list
for small_list in big_list:
    #sort small list
    small_list.sort()
    #if the small list is not in the temp list, add it
    if small_list not in temp_list:
        temp_list.append(small_list)
        #sort the temp list
        temp_list.sort()
#print the temp list
print (temp_list)

输出:

[[1, 2, 3], [4, 5], [6]]

相关问题 更多 >