矩阵置零问题:如何用一行代码将矩阵整列设为0?
解决矩阵整列置0的问题
你代码里的A[0:r][j]=[0][j]确实有问题——A[0:r]会生成原矩阵的一个临时切片副本,修改这个副本根本不会影响原矩阵;而且[0][j]只有当j=0时有效,j大于0时直接会触发索引越界错误。
要正确把矩阵的某一列(比如第j列)全部设为0,最直接的方式是遍历矩阵的每一行,将该行对应列的元素单独设为0,核心代码如下:
# 把第j列全部置为0 for row in range(r): A[row][j] = 0
结合你现有代码的场景,这里额外提醒一句:如果在遍历矩阵找0的过程中直接修改行和列,新生成的0会被后续循环当成原始的0,导致不必要的行和列被误置0。所以更稳妥的方式是先收集所有需要置0的行和列,最后统一处理,完整代码示例:
def setZeroes(self, A): r = len(A) if r == 0: return c = len(A[0]) # 先收集所有需要置0的行和列 zero_rows = set() zero_cols = set() for i in range(r): for j in range(c): if A[i][j] == 0: zero_rows.add(i) zero_cols.add(j) # 批量处理行 for row in zero_rows: A[row] = [0] * c # 批量处理列 for col in zero_cols: for row in range(r): A[row][col] = 0
其中处理列的那段循环,就是你需要的整列置0的标准实现。
内容的提问来源于stack exchange,提问作者Amit Saurabh
相关产品推荐
相关产品推荐

