You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:18:32