Если под общими буквами вы имеете в виду пересечение Счетчик, вы можете использовать оператор &
, а количество букв, необходимое для преобразования R1
в R2
, можно рассматривать как разницу:
from collections import Counter
D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7})
R1 = D1 & D2
print(R1) # intersection: min(c[x], d[x])
print(D2 - D1) # subtract (keeping only positive counts)
Выход
Counter({'D': 5, 'C': 4, 'A': 2, 'B': 1})
Counter({'B': 3, 'D': 2, 'A': 1})
Если вы хотите сохранить отрицательный счет, вы можете сделать это следующим образом:
from collections import Counter
D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5, 'E': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7, 'E': 3})
R2 = Counter({key: D2.get(key, 0) - value for key, value in D1.items()})
print(R2)
Выход
Counter({'B': 3, 'D': 2, 'A': 1, 'C': 0, 'E': -2})
В приведенном выше примере 'E' : -2
, поскольку счет E
равен 5
в D1
и 3
в D2
. Примечание: Все примеры приведены в Python 3.5.