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
相关产品推荐
相关产品推荐

