该方案仅供参考、学习交流!
有时候需要查询一个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))
# 维数相对索引为:所需索引非常规,请另寻他法![]

以上内容为原创内容,仅用于学习交流,网络写手复制粘贴再发表者请绕道!
本文介绍了一种适用于任意维度数据集的Python方法,用于获取list或array中特定元素的索引。该方法名为get_index,接受数据集source和目标target作为输入,无论数据类型是list还是array,都能处理。文章提供了测试数据和结果,强调内容为原创,仅供学习交流。

622

被折叠的 条评论
为什么被折叠?



