如果元素是重复的,则合并两个列表(python)

时间:2015-03-22 23:07:33

标签: python list merge

我有一个列表列表,如果列表中的任何元素都在两个列表中,我希望将所有列表合并在一起。

例如,请考虑以下列表: [[0],[1,2,3,4],[4,5,6],[6,7,8]]

输出应为: [0],[1,2,3,4,5,6,7,8]

1 个答案:

答案 0 :(得分:0)

尝试以下方法。在python3中测试。

def mergeOrNot(list1,list2):
    merge=False
    for item in list1:
        if item in list2:
            merge=True
            break
    return merge

def uniqueList(list1,list2):
    result = set()
    for item in list1:
        result.add(item)
    for item in list2:
        result.add(item)
    return result

def cleverMergeLists(lists):
    anotherLoopRequired=False
    newList = []
    for myList in lists:
        addMyList=True
        if not anotherLoopRequired:
            for myList2 in lists:
                if not anotherLoopRequired:
                    if(myList==myList2):
                        continue
                    if(mergeOrNot(myList,myList2)):
                        anotherLoopRequired=True
                        addMyList=False
                        newList.append(uniqueList(myList,myList2))
                else:
                    newList.append(myList2)
            if(addMyList):
                newList.append(myList)
    if anotherLoopRequired:
        return cleverMergeLists(newList)
    else:
        return newList


print(cleverMergeLists([[0],[1,2,3,4],[4,5,6],[6,7,8]]))

输出以下内容:

[0], {1, 2, 3, 4, 5, 6, 7, 8}] 

不能保证效率或任何东西,我只在你的清单上测试过,所以可能包含错误或者在某些情况下不起作用。

cleverMergeLists函数循环遍历列表中的项目,如果两个项目需要合并,则可以计算出来。如果他们这样做,它会在一个新列表中调用自己,其中两个项目合并,如果没有,它会返回传递给它的列表。