#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]
.
Правка: Конечно, это не обязательно сохранит порядок. И если вы все равно знаете, что обе коллекции уже отсортированы в начале, будет более эффективный подход.