Python 3中如何正确访问列表的列表的部分元素?
解决嵌套列表/NumPy数组取指定列元素的问题
嘿,我来帮你搞定这个问题!首先得先说说你之前代码为啥不行:
当你执行ab[1:3]的时候(不管是NumPy的matrix还是array),其实已经拿到了原数组的第2、3行(因为Python/NumPy都是0索引),也就是:
# ab[1:3]的结果 [[4, 5, 6], [7, 8, 9]]
这时候你再写[2],是想从这个只有2个元素的子数组里取第3个元素(索引2),当然会超出范围报错啦!
下面给你两种正确的实现方式:
方法1:纯Python(不需要NumPy)
如果不用NumPy,直接用列表推导式就能搞定,简单直接:
a = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] result = [row[-1] for row in a[1:3]] print(result) # 输出: [6, 9]
解释一下:
a[1:3]:取原列表的第2、3行(索引1和2)row[-1]:取每行的最后一个元素(也就是最右侧列)
方法2:用NumPy的正确切片
如果你想用NumPy,得用多维切片语法,直接同时指定行和列的范围,而不是分两次切片:
import numpy as np a = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] ab = np.array(a) # 行取1到3(不包含3,即索引1、2),列取最后一列(-1) result = ab[1:3, -1].tolist() print(result) # 输出: [6, 9]
如果用NumPy matrix的话,逻辑是一样的,只是matrix切片后是二维矩阵,转成列表需要额外处理:
ab = np.matrix(a) # 先切片,再扁平化转成列表 result = ab[1:3, -1].flatten().tolist()[0] print(result) # 输出: [6, 9]
核心就是:NumPy的多维数组要一次性指定行和列的索引/范围,不要分开两次切片,否则第二次切片是在子数组上操作,容易出错~
内容的提问来源于stack exchange,提问作者user3448011
相关产品推荐
相关产品推荐

