【问题标题】:extend item then remove item in nested list in python [closed]扩展项目然后在python的嵌套列表中删除项目[关闭]
【发布时间】:2021-01-13 11:26:08
【问题描述】:

我正在尝试在 python 中对嵌套列表进行分类,我的列表很大,但由于项目索引错误,我还没有成功。我的目标是,如果列表中的两个项目具有相同的成员,则使用 item2 扩展 item1 并删除 item2。我没有足够的python经验。希望能帮到你

My pseudo code

L = [[0, 1], [2, 3], [4, 5, 13], [6, 7], [2, 8],[3, 10, 11], [12, 13]]

for i in range(len(L)-1):
    for j in range(i+1,len(L)):
        if i!=j and set(L[i]) & set(L[j]) != set():
            L[i].extend(L[j])
            L.remove(L[j])

expected L = [[0,1], [6, 7], [2, 3, 2, 8, 3, 10, 11], [4, 5, 13, 12, 13]]

【问题讨论】:

    标签: python list nested extend


    【解决方案1】:
    L = [[0, 1], [2, 3], [4, 5, 13], [6, 7], [2, 8],[3, 10, 11], [12, 13]]
    
    out = []
    while L:
        current = L.pop(0)
        out.append(current)
        tmp = []    
        for v in L:
            if set(v).intersection(current):
                current.extend(v)
            else:
                tmp.append(v)
        L = tmp
    
    print(out)
    

    打印:

    [[0, 1], [2, 3, 2, 8, 3, 10, 11], [4, 5, 13, 12, 13], [6, 7]]
    

    编辑:版本 2:

    L = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9],[10, 11], [1,3,5,7,9,11]] 
        
    out = []
    while L:
        current = L[0]
        while True:
            tmp = []
            for i, v in enumerate(L[1:], 1):
                if set(v).intersection(current):
                    current.extend(L.pop(i))
                    break
                else:
                    tmp.append(v)
            else:
                break
        out.append(current)
        L = tmp
    
    print(out)
    

    打印:

    [[0, 1, 1, 3, 5, 7, 9, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]
    

    对于L = [[0, 1], [2, 3], [4, 5, 13], [6, 7], [2, 8],[3, 10, 11], [12, 13]] 打印:

    [[0, 1], [2, 3, 2, 8, 3, 10, 11], [4, 5, 13, 12, 13], [6, 7]]
    

    【讨论】:

    • 感谢 Andrej Kesely,您的方法非常出色,但如果我采用如下有趣的列表,那么我将不会获得理想的输出。 L = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9],[10, 11], [1,3,5,7,9, 11]]
    • 再次非常感谢 Andrej Kesely。我试过了,我得到了满意的结果..
    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 2023-04-10
    • 2022-12-20
    • 2021-02-27
    • 2014-06-04
    • 1970-01-01
    • 2016-10-04
    • 2013-03-29
    相关资源
    最近更新 更多