Python函数优化:将矩阵目标不存在时的None输出替换为(-1,-1)
解决Python矩阵目标查找函数返回值问题
正确实现代码
最直接的解决方式是在遍历完所有元素后返回(-1, -1)——只要找到目标,函数会立刻返回坐标;只有当整个矩阵都遍历完仍未找到目标时,才会执行最后的返回语句:
def find_target(target, matrix): for i, row in enumerate(matrix): for j, col in enumerate(row): if col == target: return i, j # 遍历完所有元素未找到目标,返回指定值 return -1, -1
你的错误写法分析
我们逐个看你之前尝试的问题:
- 错误的try/except写法
def find_target(target, matrix): for i, row in enumerate(matrix): for j, col in enumerate(row): try: if col == target: return i, j else: raise ValueError except ValueError: return -1, -1
问题出在:第一次循环时,如果第一个元素不是目标,你直接抛出异常并捕获返回(-1,-1),完全没有继续遍历矩阵里的其他元素,所以只要目标不在第一个位置,结果就错了。
- 错误的if/else写法
def find_target(target, matrix): for i, row in enumerate(matrix): for j, col in enumerate(row): if col == target: return i, j else: return -1, -1
这里的逻辑是:检查第一个元素时,不管是不是目标都会立刻return——是目标就返回坐标,不是就直接返回(-1,-1),根本没机会检查后面的元素。
- 无效的try/except包裹
def find_target(target, matrix): try: for i, row in enumerate(matrix): for j, col in enumerate(row): if col == target: return i, j except: return -1, -1
遍历元素找不到目标并不会触发任何异常,所以循环结束后函数没有return语句,自然返回None。这个try块只能捕获循环过程中的异常(比如矩阵格式错误),完全没处理“找不到目标”的场景。
额外优化(可选)
如果你的矩阵是有序矩阵(比如示例里的矩阵,每行从左到右递增,每列从上到下递增),可以用更高效的查找方式,不用遍历所有元素:
def find_target(target, matrix): if not matrix or not matrix[0]: return -1, -1 rows = len(matrix) cols = len(matrix[0]) # 从右上角开始查找 row, col = 0, cols - 1 while row < rows and col >= 0: if matrix[row][col] == target: return row, col elif matrix[row][col] > target: col -= 1 # 目标更小,左移一列 else: row += 1 # 目标更大,下移一行 return -1, -1
这种方法的时间复杂度是O(rows + cols),比暴力遍历的O(rows*cols)更高效,适合大矩阵场景。
内容的提问来源于stack exchange,提问作者techie_
相关产品推荐
相关产品推荐

