Подсчитайте кратности второго списка, затем удаляйте из первого не больше указанного количества каждого значения. Примеры дополнительно сортируют остаток; без сортировки порядок первого списка сохранился бы.
Удалить из одного списка элементы другого с учётом количества
Подсчитайте кратности второго списка, затем удаляйте из первого не больше указанного количества каждого значения. Примеры дополнительно сортируют остаток; без сортировки порядок первого списка сохранился бы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, которая принимает два списка и возвращает первый список после удаления из него всех элементов, присутствующих во втором списке, учитывая количество их появлений.
Пример 1:
a = [5, 4, 2, 3, 8, 1]
b = [5, 2, 2, 1]
result = [3, 4, 8]
Пример 2:
a = [5, 4, 2, 3, 8, 1, 2, 2]
b = [5, 2, 2, 1]
result = [2, 3, 4, 8]
Ответ
Подсчитайте кратности второго списка, затем удаляйте из первого не больше указанного количества каждого значения. Примеры дополнительно сортируют остаток; без сортировки порядок первого списка сохранился бы.
Для хешируемых и взаимно сравнимых элементов:
def subtract_lists(a, b):
remaining = {}
for value in b:
remaining[value] = remaining.get(value, 0) + 1
result = []
for value in a:
if remaining.get(value, 0) > 0:
remaining[value] -= 1
else:
result.append(value)
return sorted(result)
Результаты примеров — [3, 4, 8] и [2, 3, 4, 8]. Чтобы сохранить исходный порядок, возвращайте result без sorted. Отсутствующие в a элементы b просто не удаляют ничего; входные списки не изменяются.