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

Python中查找二维数组b的元素在排序后一维数组a中的索引位置

问题分析与代码修改方案

原有代码的错误点

  • 函数定义语法错误:def findall_index(b, a ) 末尾缺少冒号
  • 循环逻辑颠倒:你需要遍历二维数组b的每个元素,而非遍历一维数组a
  • 判断逻辑错误:原代码判断条件b[i][j] == a是用b的单个元素和整个a数组比较,永远不会成立
  • 排序后未赋值:你执行了np.sort(a)但没有把结果回写给a,导致后续使用的a还是未排序状态
  • 函数调用参数错误:调用时传入的0和未定义的result变量,完全不符合函数要求的入参格式
  • 类型不统一问题:b中同时存在数字0和字符串类型的邮编,判断a != '0'时会因为类型不一致导致过滤失效

修改后实现代码

先构建元素到索引的映射字典,大幅提升查找效率,避免每次查找都遍历整个a数组:

import pandas as pd
import numpy as np

# 原有数据读取逻辑保持不变
cols = [2,4,6,8,10,12,14,16,18]
df = pd.read_csv('mywork.csv')
df1 = df.iloc[:, cols]
b = np.array(df1, dtype=str) # 统一转成字符串类型,避免类型不一致导致判断错误

# 处理得到排序后的a数组
a = np.concatenate(b)
a = a[(a != 'nan') & (a != '0')] # 一次性剔除无效值,写法更简洁
a = np.sort(a) # 排序后回写给a,修正原代码漏赋值的问题

# 构建元素到索引的映射字典,查找效率更高
value_to_idx = {val: idx for idx, val in enumerate(a)}

# 实现查找函数
def findall_index(b, value_map):
    result = []
    # 遍历b的行和列
    for i in range(b.shape[0]):
        for j in range(b.shape[1]):
            current_val = b[i][j]
            # 只保留在a中存在的元素的位置,无效值可以选择跳过或者标记为-1
            if current_val in value_map:
                # 结果格式可自定义,这里返回(原二维数组行号, 原二维数组列号, 排序后a中的索引)
                result.append((i, j, value_map[current_val]))
    return result

# 调用函数输出结果
res = findall_index(b, value_to_idx)
print(res)

结果说明

返回的结果中每个元素是三元组(b的行索引, b的列索引, 对应元素在排序后a中的索引),如果你只需要a中的索引,或者需要保留无效值的位置标记,调整append的内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:01