Удалить из одного списка элементы другого с учётом количества

Подсчитайте кратности второго списка, затем удаляйте из первого не больше указанного количества каждого значения. Примеры дополнительно сортируют остаток; без сортировки порядок первого списка сохранился бы.

Короткий ответ

Что ответить на собеседовании

Подсчитайте кратности второго списка, затем удаляйте из первого не больше указанного количества каждого значения. Примеры дополнительно сортируют остаток; без сортировки порядок первого списка сохранился бы.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, которая принимает два списка и возвращает первый список после удаления из него всех элементов, присутствующих во втором списке, учитывая количество их появлений.

Пример 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 просто не удаляют ничего; входные списки не изменяются.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее