python获取指定元素索引

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

该方案仅供参考、学习交流!

有时候需要查询一个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))
# 维数相对索引为:所需索引非常规,请另寻他法![]

以上内容为原创内容,仅用于学习交流,网络写手复制粘贴再发表者请绕道!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值