Вы можете использовать множество возможностей Counter
предложений:
list1 = ['sot', 'sot', 'ts', 'gg', 'gg', 'gg']
list2 = ['gg', 'gg', 'gg', 'gg', 'gg', 'sot']
from collections import Counter
sum((Counter(list1) - Counter(list2)).values())
# 2
Давайте посмотрим на другие примеры:
list1 = ['sot', 'sot', 'ts', 'gg', 'gg', 'gg']
list2 = ['gg', 'gg', 'gg', 'gg', 'sot', 'sot']
sum((Counter(list1) - Counter(list2)).values())
# 1
list1 = ['sot', 'sot', 'ts', 'gg', 'gg', 'gg']
list2 = ['ts', 'ts', 'ts', 'ts', 'ts', 'ts']
sum((Counter(list1) - Counter(list2)).values())
# 5
list1 = ['gg', 'gg', 'gg', 'gg', 'gg', 'sot']
list2 = ['gg', 'gg', 'sot', 'gg', 'gg', 'gg']
sum((Counter(list1) - Counter(list2)).values())
# 0
Подробности
Используя Counter
, вы получите счетчик всех элементов из каждого списка в виде словаря. Вернемся к первому примеру:
c1 = Counter(list1)
# Counter({'sot': 2, 'ts': 1, 'gg': 3})
c2 = Counter(list2)
# Counter({'gg': 5, 'sot': 1})
Теперь мы как-то хотели бы понять:
Какие элементы присутствуют в list1
, но отсутствуют в list2
Из тех, кто присутствует, а также тех, которых нет, сколько еще нужно в list2
, чтобы они содержали одинаковое количество импульсов
Хорошо, мы могли бы воспользоваться тем фактом, что счетчики поддерживают математические операции, в результате которых создаются multisets
, то есть счетчики, у которых счетчики больше нуля. Поэтому, учитывая, что мы ищем разницу между обоими счетчиками, кажется, что мы могли бы вычесть их и посмотреть, какие элементы и их соответствующие значения необходимы в list2
.
Так как же будет работать вычитание между счетчиками? Давайте проверим простой пример:
Counter({1:4, 2: 1}) - Counter({1:1, 3:1})
# Counter({1: 3, 2: 1})
То, что это делает, вычитает количество соответствующих элементов, поэтому элементы, содержащиеся в первом счетчике, таким образом, порядок здесь важны. Итак, возвращаясь к предлагаемому примеру, вычитая оба списка, получим:
sub = Counter(list1) - Counter(list2)
# Counter({'sot': 1, 'ts': 1})
Теперь нам просто нужно посчитать values
во всех keys
, что можно сделать с помощью:
sum(sub.values())
# 2