Python中如何用双元素子列表作为二维数组的索引?
高效访问二维数组指定索引的方法
首先纠正你原代码里的两个问题:
range[n]是语法错误,应该写成range(n)- 双层循环完全没必要——你要访问的是每个子列表对应的二维索引,直接遍历
coords里的每个元素即可
下面是几种更简洁高效的实现方式:
1. 原生Python简化遍历
直接解构每个子列表的两个索引值,一步完成访问:
coords = [[2,1],[3,4],[5,2]] # 假设data_array是已定义的二维列表 for x, y in coords: print(data_array[x][y])
2. 批量获取值(列表推导式)
如果需要把所有结果先收集再处理,用列表推导式比逐个打印更高效:
values = [data_array[x][y] for x, y in coords] print(values) # 直接输出所有索引对应的值
3. 调整coords格式优化
如果允许修改coords的结构,可以把它拆成两个独立的一维列表(分别存x和y坐标),用zip配合遍历:
# 调整后的coords格式 xs = [2, 3, 5] ys = [1, 4, 2] # 遍历访问 for x, y in zip(xs, ys): print(data_array[x][y]) # 或者批量获取 values = [data_array[x][y] for x, y in zip(xs, ys)]
4. 大数据量场景:用numpy加速
如果处理的是大型二维数组,推荐用numpy,它支持批量索引,效率远高于原生Python循环:
import numpy as np # 假设data_array是numpy二维数组 data_array_np = np.array(data_array) coords_np = np.array(coords) # 批量获取所有索引对应的值 values = data_array_np[coords_np[:, 0], coords_np[:, 1]] print(values)
内容的提问来源于stack exchange,提问作者Clive Long
相关产品推荐
相关产品推荐

