检查两个数组是否至少有一个共同元素?

4

有没有一种最简单的方法来检查两个数组是否至少有一个元素相同?使用numpy是可能的,但不是必须的。

到目前为止,我找到的代码只检查具体的公共元素。而我只需要检查True或False条件。


这些数组长度相同吗? - EdChum
1
如果您可以接受内存开销,集合会做到这一点bool(set(first) & set(second)) - Cassum
这个回答解决了你的问题吗?在Python中测试列表是否共享任何项 - user202729
5个回答

3
假设输入的数组为AB,您可以使用np.in1dnp.any,如下所示 -
import numpy as np
np.in1d(A,B).any()

您还可以使用 NumPy的广播功能,例如:
(A.ravel()[:,None] == B.ravel()).any()

3
您可以使用任何:any
any(x in set(b) for x in a)

这段代码很短,但正如Jon所指出的那样,它会为a中的每个元素创建一个新的set(b),以下代码可以避免这种情况:

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)

5
每次循环都会将 b 转换为一个 set,这样并不高效。 - Jon Clements
@JonClements同意,最好将set(b)存储在一个变量中。 - Pablo Francisco Pérez Hidalgo

3
我会选择使用集合
def doArraysIntersect(array1, array2):
    return bool(set(array1) & set(array2))

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

1
在JavaScript中
const findCommon = (arr1, arr2) => {

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接