首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果存在重复值,则合并所有子列表,同时删除所有重复项。

如果存在重复值,则合并所有子列表,同时删除所有重复项。
EN

Stack Overflow用户
提问于 2019-07-04 20:30:46
回答 2查看 209关注 0票数 1

假设我有一个列表:

代码语言:javascript
复制
lists = [
    [1, 2, 5, 7],
    [3, 6, 8, 10],
    [2, 7, 9, 11]
]

如果它们具有相交的值,我希望合并它们(最低索引到最大索引),同时不复制重复的内容,以便输出如下所示:

代码语言:javascript
复制
new_lists = [
    [1, 2, 5, 7, 9, 11],
    [3, 6, 8, 10],
]

我如何为管理大量的列表,同时又相对高效呢?

EN

回答 2

Stack Overflow用户

发布于 2019-07-04 21:53:32

下面是类似于我上面的评论的Python2.7方法:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-07-04 21:02:22

试试这个:

代码语言:javascript
复制
lists = [
    [1, 2, 5, 7],
    [3, 6, 8, 10],
    [2, 7, 9, 11]
]

newlist=[]
for sublist in lists:
    r=sublist[-1]
    i=1
    for sublist_ in lists[i:]:
        if r in sublist_:
            lists.remove(sublist_)
            sublist.extend(sublist_[sublist_.index(r)+1:])
            newlist.append(sublist)
    i=i+1
print([list(i) for i in set(map(tuple, newlist))])

输出

代码语言:javascript
复制
[[1, 2, 5, 7, 9, 11], [3, 6, 8, 10]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56893949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档