Удалить несколько значений из 2 списков, но только один раз, в Python - PullRequest
3 голосов
/ 25 февраля 2020

У меня есть два списка:

A = [5,5,4,3]
B = [5,1]

Я хочу удалить значения, которые появляются в обоих списках, но только один раз, т.е. вывод должен быть:

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

Я понимаю, что Хороший способ получить разницу - наборы , но это удаляет все повторений, а не только один раз

Ответы [ 3 ]

3 голосов
/ 25 февраля 2020

Вы можете создать collections.Counter объекты со списками ввода и получить разницу между ними:

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]
1 голос
/ 25 февраля 2020

Используйте наборы, чтобы найти дубликаты, но затем удалите их один раз из исходных списков.

dups = set(A).intersection(set(B))
for dup in dups:
    A.remove(dup)
    B.remove(dup)
0 голосов
/ 25 февраля 2020

Вы можете удалить из каждого счетчика, связанного с А и В, сборку счетчика, используя набор из двух списков, чтобы они рассматривались только один раз.

>>> 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...