python - 使用 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 输出版本中的错字
解决方案
首先,我将数组转换为 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)]
推荐阅读
- r - R - 将循环内的表连接到循环外的表
- raspberry-pi - Raspberry Pi 4B - 如何将应用程序与显示器相关联
- python - 打印一个数组并在python中找到带有for循环的指定字符串时停止
- javascript - 中风未在 javascript 的图像上呈现
- javascript - 设置 cookie 不出现在 Axios 和 Fetch 中
- perl - 有没有更好的方法在 perl cgi 脚本中提供体面的密码散列?
- vue.js - Nuxt.js(webpack),多个静态文件夹?
- ios - 从firebase调用数据需要完成处理程序?
- sql - 未使用 string_to_array(long_string, ',') 上的 Postgres 功能索引
- python - 无法在 SQL Alchemy 中返回 Postgres 表名