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

Python反对称网格检测函数结果错误排查求助

排查反对称矩阵检测函数的问题

嘿,我一眼就看到你代码里的核心问题了——你的逻辑完全搞反了,而且循环根本没机会完整遍历所有元素!

问题出在哪?

你的函数现在的逻辑是:

  • 只要找到第一个满足 A[i][j] == -A[j][i] 的元素,就立刻返回 True
  • 要是第一个元素不满足,就直接返回 False

但反对称矩阵的要求是所有位置的元素都必须满足 A[i][j] = -A[j][i],不是只要有一个符合就行。更糟的是,你的循环里 j +=1 和 i +=1 根本没机会执行,因为第一次循环就直接return了——比如你那个有问题的测试用例,第一个元素 A[0][0] 是0,满足 0 == -0,函数直接返回True,完全没检查后面的A[2][0](2 vs -2)、A[2][2](3 vs -3)这些不符合的元素。

修正后的代码

我们要把逻辑反过来:遍历所有元素,只要发现任何一个不满足条件的,就返回False;等所有元素都检查完没问题,再返回True。

用while循环的版本:

def antisymmetric(A):
    n = len(A)
    # 先检查是不是方阵(可选,但让函数更健壮)
    for row in A:
        if len(row) != n:
            return False
    i = 0
    while i < n:
        j = 0
        while j < n:
            # 发现不符合的就立刻返回False
            if A[i][j] != -A[j][i]:
                return False
            j += 1
        i += 1
    # 所有元素都符合才返回True
    return True

如果用for循环会更简洁易读:

def antisymmetric(A):
    n = len(A)
    # 检查是否为方阵
    if any(len(row) != n for row in A):
        return False
    for i in range(n):
        for j in range(n):
            if A[i][j] != -A[j][i]:
                return False
    return True

测试验证

现在跑你那个有问题的测试用例:

print(antisymmetric([[0, 1, 2], [-1, 0, -2], [2, 2, 3]]))  # 输出 False,符合预期

原来正确的测试用例也能正常返回True,没问题。

内容的提问来源于stack exchange,提问作者sim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:03:24