【问题标题】:substract items from array / numpy从数组/numpy中减去项目
【发布时间】:2022-01-05 21:25:18
【问题描述】:
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-array 中的每个项目

是否有一个 numpy 函数可以这样做?

【问题讨论】:

  • 把数组变成计数表?无论如何,这将更普遍有用
  • 您实际上并没有使用 numpy,对于列表,您可以使用 [org.remove(i) for i in remove]。请注意,如果i 不在org 中,这将抛出ValueError,因此您需要处理它。 @CJR 也有一点,我不知道用例是什么,但考虑一下。

标签: python arrays numpy


【解决方案1】:

根据 CJR 的评论,原来内置的 Counter 理解减法并“做正确的事”。它会默默地忽略第一个计数器中不存在的任何元素。

所以你可以这样做:

from collections import Counter

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

给result = [1,1,2,4]。

编辑:当然,这不一定会保留顺序。如果您知道这两个集合在开始时已经排序,那么会有更有效的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多