首页 > 解决方案 > 如果存在重复值,则合并所有子列表,同时删除所有重复项

问题描述

假设我有一个列表列表:

lists = [
    [1, 2, 5, 7],
    [3, 6, 8, 10],
    [2, 7, 9, 11]
]

如果它们具有相交值,我想合并它们(从最低到最大索引),而不是复制重复项,以便输出如下所示:

new_lists = [
    [1, 2, 5, 7, 9, 11],
    [3, 6, 8, 10],
]

我如何在相对高效的同时管理大量列表

标签: pythonarrayslistduplicates

解决方案


所以这是一个类似于我上面评论的 Python 2.7 方法:

lists = [
    [1, 2, 5, 7, 13],
    [3, 6, 8, 10, 13],
    [2, 7, 9, 11]
]

thedict = {}
for sublist in lists:
    for el in sublist:
        thedict[el] = 1

keylist = thedict.keys()

# at this point, you have one merged list:

print str(keylist)

# You might want to sort it, as key order is not assured

keylist.sort()

# if you want smaller lists, then you can do something like this:

listsize = 5
outlistoflists = []
for i in range(0, len(keylist), listsize):
    sublist = keylist[i:i + listsize]
    outlistoflists.append(sublist)

print str(outlistoflists)

推荐阅读