Python矩阵负数替换为正数 for循环遍历跳过中间值问题求解
矩阵负数替换问题修复方案
错误根因
你代码的核心问题是遍历列表的同时对列表执行增删操作,这会动态改变列表的元素索引,导致for循环迭代时跳过未处理的元素。
比如你遍历第一个子列表[-4, -7, -9]时,第一次取到元素-4,执行remove后列表变为[-7, -9],再append4后列表变为[-7, -9, 4],此时for循环会自动跳到下一个索引位置,直接跳过了当前索引0的-7,最终导致结果残留负数。同时你代码中的while逻辑冗余,重复判断了数值正负,且通过remove+append的方式修改元素效率极低。
修复方案
方案1:直接修改原矩阵(不改变元素顺序,无需增删列表)
通过索引遍历矩阵的每个元素,遇到负数直接取反修改对应位置的值即可:
def replaceNegatives(matrix): for i in range(len(matrix)): for j in range(len(matrix[i])): if matrix[i][j] < 0: matrix[i][j] = -matrix[i][j] return matrix testMatrix = [[-4, -7, -9], [-2, -4, -6], [2, 4, -5]] print(replaceNegatives(testMatrix))
运行输出:
[[4, 7, 9], [2, 4, 6], [2, 4, 5]]
方案2:生成新矩阵(不修改原输入矩阵,写法更简洁)
直接用列表推导式搭配内置abs()函数取绝对值,生成符合要求的新矩阵:
def replaceNegatives(matrix): return [[abs(num) for num in row] for row in matrix]
内容的提问来源于stack exchange,提问作者Janys02
相关产品推荐
相关产品推荐

