Сравнить два списка и вывести недостающие элементы (с сохранением количества)
Пытаюсь получить все элементы списка list_a, которых нет в списке list_b (с сохранением количества):
list_a = ['users1_', 'users1_', 'users2_', 'users3_']
list_b = ['users1_', 'users3_']
list_c = list()
for template in list_a:
if template not in list_b:
list_c.append(template)
print(list_c) # ['users2_']
Но получаю только один элемент. Что требуется сделать, чтобы получить ['users1_', 'users2_'] ?
Что-то вроде:
print(list(set(list_a) ^ set(list_b)))
не подходит, поскольку мне важны все элементы списка. Здесь set не подходит, так как он оставит только уникальные элементы в списках.
Ответы (3 шт):
Автор решения: gil9red
→ Ссылка
А так?
Разницу добавляем в list_b:
list_a = ['users1_', 'users1_', 'users2_', 'users3_']
list_b = ['users1_', 'users3_']
list_c = []
for x in list_a:
num_a = list_a.count(x)
num_b = list_b.count(x)
if num_a > num_b:
list_b.append(x)
list_c.append(x)
print(list_c) # ['users1_', 'users2_']
Автор решения: Эникейщик
→ Ссылка
Если элемент найден, то удалить из списка b:
for template in list_a:
if template not in list_b:
list_c.append(template)
else:
list_b.remove(template)
Автор решения: extrn
→ Ссылка
Если порядок элементов в результирующем списке не важен, зато важна производительность.
from collections import Counter
list_c = list((Counter(list_a) - Counter(list_b)).elements()) # ['users1_', 'users2_']