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

问题描述:

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

我到目前为止发现的代码只检查具体的通用元素。而我只需要检查True或False情况。

+0

数组的长度是否相同? – EdChum

+1

如果你可以使用内存开销 – Cassum

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

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

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

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

您可以使用any

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

这是短期写的,但正如乔恩正确指出将在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) 
+4

这将会把'bool(set(first)&set(second))'设置为'bool(set *非常高效 –

+0

@JonClements同意,最好将'set(b)'保存在一个变量中。 –

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

这有一个非常讨厌的最坏情况和平均运行时间... –

我会去。

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