检查python中的两个数组,它们在一个数组中有两个相同的值

Posted

技术标签:

【中文标题】检查python中的两个数组,它们在一个数组中有两个相同的值【英文标题】:checking two arrays in python which has two same value in an array 【发布时间】:2021-12-28 08:20:42 【问题描述】:

我有两个数组,我试图找到在第一个数组中但不在第二个数组中的值。但是,有一个问题,虽然第一个数组有两个b,但由于另一个数组只有一个b,所以它看到它是相同的,并给出没有区别的输出。我该如何解决这个问题?

x = ["a","b","b"]
y = ["a","b"]

print(set(x)-set(y))

【问题讨论】:

一种方法是遍历一个数组,获取数组中每个值的计数,然后对第二个执行相同的操作。然后,遍历第一个数组的每个值及其计数,并检查第二个数组的每个值是否具有相同的计数。 【参考方案1】:

这应该可以解决问题

 for i in y:
     if (i in x):
         x.remove(i)
 print(x)

【讨论】:

这有一个 O(n^2) 复杂度,当数组很大时可能太多了 我同意,为了快速编写脚本,这应该可行。不推荐用于大型工作流程。【参考方案2】:

试试这个:

from collections import Counter

res = [k for k, v in (Counter(x) - Counter(y)).items() for _ in range(v)]

这种方法的复杂性是你能得到的最好的(即 O(n))。

例子:

>>> x = [1,2,2,2,3,4,5]
>>> y = [1,2,4]
>>> res = [k for k, v in (Counter(x) - Counter(y)).items() for _ in range(v)]
>>> res
[2, 2, 3, 5]

使用这种方法,您将失去元素的顺序。如果你的情况不好,请告诉我。

【讨论】:

【参考方案3】:

我的方法是列表理解:

x = ["a","b","b"]
y = ["a","b"]

[x.remove(element) for element in y if element in x]       

输出:

['b']

【讨论】:

以上是关于检查python中的两个数组,它们在一个数组中有两个相同的值的主要内容,如果未能解决你的问题,请参考以下文章

比较数组中的值计算它们并合并表中的行

检查数组中的最后一个元素是不是匹配条件

Python:使用 NaN 对数组进行排序

如何检查数组中的数字是不是相等?

检查两个 3D numpy 数组是不是包含重叠的 2D 数组

Java中有啥方法能使大于long 的两个数相乘???