вычитание элементов из массива / numpy

#python #arrays #numpy

Вопрос:

 org = [1,1,1,1,2,2,4] remove = [1,1,2]  result = foo(org, remove) # result = [1,1,2,4] # two 1 are removed and one 2  

Я хочу удалить элементы из org , но не все с одинаковым значением — только по одному удалению каждого элемента в remove массиве

Есть ли для этого функция numpy?

Комментарии:

1. Превратить массив в таблицу подсчетов? В любом случае это было бы более полезно в целом

2. на самом деле вы не используете numpy для списка, который вы можете просто сделать [org.remove(i) for i in remove] . Обратите внимание , что это приведет к выбрасыванию ValueError , если i его нет org , поэтому вам нужно с этим справиться. Также у @CJR есть точка зрения, я не знаю, каков вариант использования, но подумайте об этом.

Ответ №1:

Следуя комментарию CJR, оказывается, что встроенный Counter понимает вычитание и «поступает правильно». Он молча игнорирует любые элементы, которых нет в первом счетчике.

Так что вы можете сделать что-то вроде этого:

 from collections import Counter  c1 = Counter(org) c2 = Counter(remove) result = list((c1 - c2).elements())  

Давать result = [1,1,2,4] .

Правка: Конечно, это не обязательно сохранит порядок. И если вы все равно знаете, что обе коллекции уже отсортированы в начале, будет более эффективный подход.