纯Python中无for循环实现二维数组列切片是否有对应原生语法?
纯Python原生嵌套列表的多维切片问题解答
核心结论
原生Python没有专门针对嵌套列表的二维批量切片语法,不过可以通过内置函数实现无显式for循环、无列表推导式的操作。
错误写法原因说明
你之前写的grid[1:4][0:2]不符合预期,是因为Python嵌套列表的连续切片是逐层级生效的:
- 第一步
grid[1:4]已经得到了去掉首行的3行嵌套列表:[[5,6,7,8],[9,10,11,12],[13,14,15,16]] - 第二步再执行
[0:2]是对外层的行列表做切片,只会取前2行,完全不会操作内层每个子列表的列维度,自然得不到你要的结果。
符合要求的实现方案
使用内置的map函数对切行后的每个子列表做列切片,不需要写显式for循环和列表推导式:
grid = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] # 先切行grid[1:]去掉首行,再对每一行做[:-1]切片去掉最后一列 result = list(map(lambda row: row[:-1], grid[1:]))
执行后result的输出就是你需要的[[5,6,7],[9,10,11],[13,14,15]]。
拓展说明
如果日常高频处理多维数组的切片、计算需求,可以使用numpy库,它原生支持多维度切片语法,写法更简洁:
import numpy as np arr = np.array(grid) # 逗号前为行切片规则,逗号后为列切片规则 result = arr[1:, :-1].tolist()
内容的提问来源于stack exchange,提问作者Actuarysmacktuary
相关产品推荐
相关产品推荐

