有时候需要查询一个list或者array中某个元素所在的位置索引,也就是行列号,对于pandas数据而言这个比较容易,但是对于一般的list或者array而言,简单的可以用list.index或者np.where等获取,但是对于部分特殊情况却无法获取,下方所构建get_index方法可适用于所有情景。
函数说明:输入参数为数据集source和需要查询位置的目标target,二者的维数可以是任意维数,数据类型可以是list也可以是array,使用时需要提前导入numpy包。返回内容为索引组成的list。
import numpy as np
def get_index(source,target):
if type(source) is not np.ndarray:
source_arr = np.array(source)
else:
source_arr = source
if type(target) is not np.ndarray:
target_arr = np.array(target)
else:
target_arr = target
source_dim = len(source_arr.shape)
target_dim = len(target_arr.shape)
target_index = []
dim_delta = source_dim - target_dim
if 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 = 3 b1 = [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))
# 维数相对索引为:所需索引非常规,请另寻他法![]
以上内容为原创内容,仅用于学习交流,网络写手复制粘贴再发表者请绕道!



