You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中基于另一列表定位列表元素的索引问题

定位J2元素在J1中的索引问题

问题分析

你需要获取J2中每个元素在J1中的对应索引,当前代码逻辑错误导致输出不符合预期,以下是修正方案:

当前代码的错误原因

[i for i in J2 and J1]中的J2 and J1是布尔逻辑运算:非空列表在布尔判断中为True,所以J2 and J1最终返回J1,列表推导式实际是遍历J1的内层列表,因此输出与J1一致,完全偏离需求。

解决方案

方案1:纯Python实现(无需numpy)

直接提取嵌套列表中的一维数据,遍历J2元素并获取其在J1中的索引:

J1 = [[1, 2, 4, 6, 7, 9, 10]]
J2 = [[2, 6, 7, 9, 10]]

# 取出内层的一维列表
j1_inner = J1[0]
j2_inner = J2[0]

# 生成目标索引列表
indices = [[j1_inner.index(num) for num in j2_inner]]
print(indices)

输出:

[[1, 3, 4, 5, 6]]

方案2:numpy实现(适合大规模数据)

利用numpy的数组操作,更高效地处理索引查找:

方法A:使用np.where

import numpy as np

J1 = np.array([[1, 2, 4, 6, 7, 9, 10]])
J2 = np.array([[2, 6, 7, 9, 10]])

# 遍历J2内层元素,找到每个元素在J1中的索引
indices = [np.where(J1 == num)[1][0] for num in J2[0]]
# 整理为二维列表格式
indices = [indices]
print(indices)

方法B:使用np.searchsorted(J1有序时更高效)

由于你的J1是升序排列的,可使用searchsorted快速定位:

import numpy as np

J1 = np.array([[1, 2, 4, 6, 7, 9, 10]])
J2 = np.array([[2, 6, 7, 9, 10]])

# 直接获取J2元素在J1中的索引
indices = [np.searchsorted(J1[0], J2[0])]
print(indices)

两种numpy方法的输出均符合期望。

内容的提问来源于stack exchange,提问作者isaacmodi123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:02:53