检查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中的两个数组,它们在一个数组中有两个相同的值的主要内容,如果未能解决你的问题,请参考以下文章