删除两个列表中的公共元素

Ant*_*Via 5 python list matching

我有两个排序的正整数列表,它们可以有重复的元素,我必须从每个列表中删除匹配的数字对:

a=[1,2,2,2,3]
b=[2,3,4,5,5]
Run Code Online (Sandbox Code Playgroud)

应该变成:

a=[1,2,2]
b=[4,5,5]
Run Code Online (Sandbox Code Playgroud)

也就是说,2 和 3 已被删除,因为它们出现在两个列表中。

由于元素重复,这里不能使用集合交集。

我该怎么做?

小智 4

要删除两个列表中出现的元素,请使用以下命令:

for i in a[:]:
    if i in b:
        a.remove(i)
        b.remove(i)
Run Code Online (Sandbox Code Playgroud)

要创建一个为您执行此操作的函数,只需执行以下操作:

def removeCommonElements(a, b):
    for e in a[:]:
        if e in b:
            a.remove(e)
            b.remove(e)
Run Code Online (Sandbox Code Playgroud)

或者返回新列表而不编辑旧列表:

def getWithoutCommonElements(a, b): # Name subject to change
    a2 = a.copy()
    b2 = b.copy()
    for e in a:
        if e not in b:
            a2.remove(e)
            b2.remove(e)
    return a2, b2
Run Code Online (Sandbox Code Playgroud)

但是前者可以替换为removeCommonElements如下所示:

a2, b2 = a.copy(), b.copy()
removeCommonElements(a2, b2)
Run Code Online (Sandbox Code Playgroud)

这将保留 a 和 b,但创建没有公共元素的重复项。