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
相关产品推荐
相关产品推荐

