Python矩阵操作:删除首行后切换删除单列求每次剩余矩阵实现问题
矩阵操作问题解法
原代码问题点
- 浅拷贝失效:Python列表自带的
copy()为浅拷贝,父列表虽然复制,但子列表还是指向同一块内存地址,修改子列表元素时备份会同步变更,无法作为恢复基准 - 恢复逻辑错误:需要的恢复基准是删除第一行后的矩阵,而非原始矩阵,同时
pop()会直接修改原对象,没有每次操作前重置为基准状态,导致后续删除逻辑混乱
最优实现代码
不用修改原对象、不需要额外恢复逻辑的写法,运行直接输出预期结果:
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 生成删除第一行后的基准矩阵,全程不修改该基准 base_matrix = a[1:] for del_col_idx in range(3): # 遍历每一行,筛选出不需要删除的列元素,直接生成目标矩阵 current_matrix = [[col for col_idx, col in enumerate(row) if col_idx != del_col_idx] for row in base_matrix] print(current_matrix)
沿用pop写法的修正方案
需要引入深拷贝保证备份基准不被修改:
import copy a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 先删除第一行得到基准 a.pop(0) for del_col_idx in range(3): # 每次操作前深拷贝基准,修改的是拷贝后的临时变量 temp_matrix = copy.deepcopy(a) for row_idx in range(2): temp_matrix[row_idx].pop(del_col_idx) print(temp_matrix)
两种方案的运行输出均符合预期:
[[5, 6], [8, 9]] [[4, 6], [7, 9]] [[4, 5], [7, 8]]
内容的提问来源于stack exchange,提问作者Codingbeginner
相关产品推荐
相关产品推荐

