检查2个数组是否至少有一个共同的元素?
什么是检查2个数组是否至少有一个共同元素的最简单方法?使用numpy是可能的,但不一定。检查2个数组是否至少有一个共同的元素?
我到目前为止发现的代码只检查具体的通用元素。而我只需要检查True或False情况。
假设输入数组为A
和B
,您可以使用np.in1d
与np.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)
这将会把'bool(set(first)&set(second))'设置为'bool(set *非常高效 –
@JonClements同意,最好将'set(b)'保存在一个变量中。 –
def lists_overlap(a, b)
for i in a:
if i in b:
return True
return False
这有一个非常讨厌的最坏情况和平均运行时间... –
我会套去。
def doArraysIntersect(array1, array2):
return bool(set(array1) & set(array2))
数组的长度是否相同? – EdChum
如果你可以使用内存开销 – Cassum