检查2个阵列是否至少有一个共同的元素?

时间:2015-10-06 12:03:46

标签: python numpy

检查2个数组是否至少有一个共同元素的最简单方法是什么?使用numpy是可能的,但不一定。

到目前为止我找到的代码只检查具体的共同元素。而我只需要检查真或假条件。

5 个答案:

答案 0 :(得分:3)

假设输入数组为AB,您可以将np.in1dnp.any一起使用,就像这样 -

import numpy as np
np.in1d(A,B).any()

您也可以使用NumPy's broadcasting capability,就像这样 -

(A.ravel()[:,None] == B.ravel()).any()

答案 1 :(得分:3)

您可以使用any

any(x in set(b) for x in a)

这是写作的简短但是,正如Jon正确地指出它将为set(b)的每个元素创建一个新的a,以下几行将避免这样做:

sb = set(b)
any(x in sb for x in a)

如果b是最大的数组(与a相比),性能会提高:

(smaller,bigger) = sorted([a,b], key=len)
sbigger = set(bigger)
any(x in sbigger for x in smaller)

答案 2 :(得分:3)

我会选择

def doArraysIntersect(array1, array2):
    return bool(set(array1) & set(array2))

答案 3 :(得分:2)

def lists_overlap(a, b):
    for i in a:
       if i in b:
            return True
    return False

答案 4 :(得分:0)

在JavaScript中

const findCommon = (arr1, arr2) => {

     let set = new Set(arr1)
     arr2.forEach((item) => {
         if (set.has(item)) return true
     })
     return false
}

基本上,我已经做了每个人在这里提出的建议。如果您正在寻找JS解决方案...