You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

你的错误写法分析

我们逐个看你之前尝试的问题:

  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),完全没有继续遍历矩阵里的其他元素,所以只要目标不在第一个位置,结果就错了。

  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),根本没机会检查后面的元素。

  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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:50:31