首页 > 解决方案 > 使用 numpy 查找 2 个列表列表之间的交集

问题描述

我有 2 个列表。

情况1

x = [[1,2],[3,4],[5,6]]
y = [[1,2],[3,4]]

我试过 numpy.intersect1d

import numpy as np
np.intersect1d(x,y, return_indices=True)
>>> (array([1, 2, 3, 4]), array([0, 1, 2, 3]), array([0, 1, 2, 3]))

期望的结果

>>> (array([1, 2, 3, 4]), array([0, 1]), array([0, 1]))

案例2

x = [[1,2],[3,10],[5,6]]
y = [[1,2],[3,4]]

期望的结果

>>> (array([1, 2, 3]), array([0, 1]), array([0, 1]))

对我来说,最重要的部分是知道列表 x 中的哪些索引在列表 y 中有部分 匹配。类似于:

[[0,1], # indices of x
[0,1]] # indices of y

更新 1:不需要使用 numpy,但我需要一个快速的解决方案。更新 2:修复了 numpy 输出版本中的错字

标签: pythonarraysnumpy

解决方案


首先,我将数组转换为 numpy:

import numpy as np
x = np.array([[1,2],[3,4],[5,6]])
y = np.array([[1,2],[3,4]])

之后,我找到了他们的交集:

intersection=np.intersect1d(x,y, return_indices=True)[0]

定义了一个简单的函数来与列表进行比较(我知道这里还有改进的余地):

def compare_list(list_1, list_2):
for item in list_1:
    if item in list_2:
        return True
return False

终于找到了你要找的东西(y也是如此):

x_finds=[i for i in range(len(x)) if compare_list(x[i], intersection)]

推荐阅读