Python多维数组切片疑问:matrix[X:X][X:X]语法解析
Python 普通列表切片的误区解析
你理解错了切片逻辑
你把普通Python列表的连续切片当成了“同时指定行和列”的多维切片,但两者完全不是一回事:
- 第一步
matrix[0:2]确实拿到了前两行:[[1,2,3], [4,5,6]],这是一个全新的二维列表。 - 第二步
[1:2]是对这个新列表再次做行切片,而不是列切片。因为这个新列表的每个元素都是原矩阵的一整行,[1:2]取的是它索引为1的元素(切片遵循左闭右开规则,所以只包含索引1对应的元素),也就是[4,5,6],最终结果就是[[4,5,6]]。
如果想实现你预期的“取前两行,再取这些行里第1到第2列的元素”,普通列表得用列表推导式:
result = [row[1:2] for row in matrix[0:2]] # 输出:[[2], [5]]
要是用numpy数组,就能直接写matrix[0:2, 1:2]这种直观的多维切片语法。
这种写法的名称
这种matrix[X:X][X:X]的语法叫链式切片,本质就是连续对列表(或切片后的结果)执行独立的切片操作,每一步的操作对象都是上一步的返回值,不是同时对多维结构的行和列进行筛选。
内容的提问来源于stack exchange,提问作者chilly8063
相关产品推荐
相关产品推荐

