检查列表数组中每个元素之间的交集

问题描述 投票:0回答:1

在Python中,我有一个不同大小数组的列表。我想知道列表中包含的所有数组的交集。例如:

import numpy as np

array0 = [0,1,2,3,4,5,6]
array1 = [0,2,3,5,6,7,8,9,10]
array2 = [4,5,6]
array3 = [5,6,7,8,9,10,11,12,13]

array_list = [array0, array1, array2, array3]

我想在

np.intersect1d
中的所有数组中使用像
array_list
这样的函数,并获取所有数据数组的交集。乍一看,答案是

intersection = np.array([5,6])

我尝试过使用列表理解,例如:

np.intersect1d([arraylist[x] for x in np.arange(len(arraylist))]),

但是 Numpy 需要 2 个参数,而不是我提供的参数。出于类似的原因,

list(filter(lambda x:x in [x for x in arraylist]))

不起作用——

filter
期望有2个参数,但只得到一个。

python arrays list-comprehension intersection
1个回答
0
投票

您可以使用

reduce()
模块中的
functools
将多个列表与
np.intersect1d
相交:

import numpy as np
from functools import reduce

array0 = [0,1,2,3,4,5,6]
array1 = [0,2,3,5,6,7,8,9,10]
array2 = [4,5,6]
array3 = [5,6,7,8,9,10,11,12,13]

array_list = [array0, array1, array2, array3]

print(reduce(np.intersect1d,[array0, array1, array2, array3] ))

输出:-

[5 6]

或使用

sets
使它们相交

import numpy as np

array0 = [0,1,2,3,4,5,6]
array1 = [0,2,3,5,6,7,8,9,10]
array2 = [4,5,6]
array3 = [5,6,7,8,9,10,11,12,13]
    
array_list = [array0, array1, array2, array3]

print(set.intersection(*map(set,array_list)))

输出:-

{5,6}
© www.soinside.com 2019 - 2024. All rights reserved.