Как составить список из элементов других списков, подпадающих под определённые требования?

Всем привет! Прошу прощения за тупую формулировку вопроса. Только начал изучать язык =
Объясню на примере: Есть два списка:

а= [1, 1, 2, 2, 3, 3, 4, 5, 7, 7, 7, 9]
b= [1, 2, 4, 7]

Как вывести список, в котором была бы разница между повторяющимися элементами? т.е. к примеру в 1м списке две "1", во 2м списке одна "1" - в третьем должна быть одна "1". В первом списке три "7", во втором одна "7", соответственно в третьем списке должно быть две "7" и т.д. Но и чтобы элементы уникальные для каждого списка в третьем тоже были, как в данном случае две "3" и "9" из первого списка. Я прочитал про массивы, но у меня никак не получается сделать так как следует =\

Заранее спасибо за помощь!!


Ответы (1 шт):

Автор решения: user393663
from collections import Counter

a = [1, 1, 2, 2, 3, 3, 4, 5, 7, 7, 7, 9] 
b = [1, 2, 4, 7]
print(list((Counter(a) - Counter(b)).elements()))

Уникальные элементы из b не выводятся, потому что Counter().elements() игнорирует элементы со счётчиком <= 0. Если надо их учитывать, надо вручную пройтись по парам и выписать их тоже. Либо так, но это будет медленней:

print(list(((Counter(a) | Counter(b)) - (Counter(a) & Counter(b))).elements()))
→ Ссылка