该方案仅供参考、学习交流!
有时候需要查询一个list或者array中某个元素所在的位置索引,也就是行列号,对于pandas数据而言这个比较容易,但是对于一般的list或者array而言,简单的可以用list.index或者np.where等获取,但是对于部分特殊情况却无法获取,下方所构建get_index方法可适用于所有情景。
函数说明:输入参数为数据集source和需要查询位置的目标target,二者的维数可以是任意维数,数据类型可以是list也可以是array,使用时需要提前导入numpy包。返回内容为索引组成的list。
import numpy as npdef get_index(source,target):if type(source) is not np.ndarray:source_arr = np.array(source)else:source_arr = sourceif type(target) is not np.ndarray:target_arr = np.array(target)else:target_arr = targetsource_dim = len(source_arr.shape)target_dim = len(target_arr.shape)target_index = []dim_delta = source_dim - target_dimif dim_delta == 1:for i in range(len(source_arr)):if (target_arr == source_arr[i]).all():target_index.append(i)elif dim_delta == 2:for i in range(len(source_arr)):for j in range(len(source_arr[i])):if (target_arr == source_arr[i][j]).all():target_index.append([i,j])elif dim_delta == 3:for i in range(len(source_arr)):for j in range(len(source_arr[i])):for k in range(len(source_arr[i][j])):if (target_arr == source_arr[i][j][k]).all():target_index.append([i,j,k])else:print('所需索引非常规,请另寻他法!',end='')return target_index
测试数据如下:
a1 = [1,3,5,6,3]a2 = [[1,2,3],[3,6,1],[1,2,3],[7,3,2]]a3 = [[[1,2,3],[3,6,1],[1,2,3],[7,3,2]]]a4 = [[[[1,2,3],[3,6,1],[1,2,3],[7,3,2]]]]b0 = 3b1 = [1,2,3]
测试结果如下:
print('维数相对索引为:',end='')print(get_index(a2,b0))# 维数相对索引为:[[0, 2], [1, 0], [2, 2], [3, 1]]print('维数相对索引为:',end='')print(get_index(a2,b1))# 维数相对索引为:[0, 2]print('维数相对索引为:',end='')print(get_index(a3,b1))# 维数相对索引为:[[0, 0], [0, 2]]print('维数相对索引为:',end='')print(get_index(a3,b0))# 维数相对索引为:[[0, 0, 2], [0, 1, 0], [0, 2, 2], [0, 3, 1]]print('维数相对索引为:',end='')print(get_index(a4,b0))# 维数相对索引为:所需索引非常规,请另寻他法![]print('维数相对索引为:',end='')print(get_index(a1,b1))# 维数相对索引为:所需索引非常规,请另寻他法![]
以上内容为原创内容,仅用于学习交流,网络写手复制粘贴再发表者请绕道!