组合嵌套列表并删除重复项

时间:2016-02-03 22:12:57

标签: python list

希望能在新手问题上获得一些帮助。我想对一堆子列表进行排序,如果子列表中的任何项目出现两次,则删除它们,并将各自列表中的值合并到一个新的子列表中。

举个例子:

my_currentlist = [[A,B],[C,D],[B,E]]
my_desiredlist = [[A,E],[C,D]]

有什么想法吗?

我失败的尝试(对不起,对python来说是新手):

for i in range(len(items)):
    j=i+1
    for j in range(len(items)):
        if items[i][0]==items[j][0]:
            items.remove(items[i])
            items.remove(items[j])
            items.append([items[i][1], items[j][1]])
        elif items[i][0]==items[j][1]:
            items.remove(items[i])
            items.remove(items[j])
            items.append([items[i][1], items[j][0]])
        elif items[i][1]==items[j][0]:
            items.remove(items[i])
            items.remove(items[j])
            items.append([items[i][0], items[j][1]])
        elif items[i][1]==items[j][1]:
            items.remove(items[i])
            items.remove(items[j])
            items.append([items[i][0], items[j][0]])    

1 个答案:

答案 0 :(得分:0)

你需要一个双循环,第一个从列表中取一个元素(子列表),第二个用于检查子元素其余部分中元素的存在

这应该可以解决问题

>>> my_currentlist = [["A","B"],["C","D"],["B","E"]]
>>> my_desiredlist = []
>>> while my_currentlist:
        a,b = my_currentlist.pop(0)
        for i,temp in enumerate(my_currentlist):
            if a in temp:
                temp.remove(a)
                a = temp[0]
                my_currentlist.pop(i)
                break
            elif b in temp:
                temp.remove(b)
                b = temp[0]
                my_currentlist.pop(i)
                break
        my_desiredlist.append( [a,b] )

>>> my_desiredlist
[['A', 'E'], ['C', 'D']]
>>>