在Python中,从2个列表中删除多个值,但仅删除一次

在Python中,从2个列表中删除多个值,但仅删除一次,python,python-3.x,list,set,Python,Python 3.x,List,Set,我有两份清单: A = [5,5,4,3] B = [5,1] 我想删除两个列表中出现的值,但只删除一次,即输出应为: Aprime = [5,4,3] Bprime = [1] 我知道获得差异的一个好方法是使用,但这会删除所有重复,而不仅仅是一次使用集合查找重复项,然后从原始列表中删除一次 dups = set(A).intersection(set(B)) for dup in dups: A.remove(dup) B.remove(dup) 您可以创建集合。使用输入

我有两份清单:

A = [5,5,4,3]
B = [5,1]
我想删除两个列表中出现的值,但只删除一次,即输出应为:

Aprime = [5,4,3]
Bprime = [1]

我知道获得差异的一个好方法是使用,但这会删除所有重复,而不仅仅是一次使用集合查找重复项,然后从原始列表中删除一次

dups = set(A).intersection(set(B))
for dup in dups:
    A.remove(dup)
    B.remove(dup)

您可以创建
集合。使用输入列表计数器
对象,并获取两者的差异:

from collections import Counter
a = Counter(A)
b = Counter(B)
Aprime = list((a - b).elements()) # Aprime becomes: [5, 4, 3]
Bprime = list((b - a).elements()) # Bprime becomes: [1]

您可以使用两个列表的集合从与A和B关联的每个计数器中删除计数器生成,以便它们只被考虑一次

>>> A = [5,5,5,1,1]
>>> B = [5,1,1]
>>> a_new = list((Counter(A) - Counter(set(B))).elements())
>>> b_new = list((Counter(B) - Counter(set(A))).elements())
>>> a_new
[5, 5, 1]
>>> b_new
[1]

如果
A=B=[1,1]
呢?这将返回两个空列表,表示
1
被多次删除。