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

技术求助:如何交换二维数组中主对角线对称位置的元素?

二维方阵主对角线对称元素交换问题的修正方案

现有代码的核心问题

  • 函数未封装必要参数:obmen直接依赖全局变量n和A,调用时易因变量未定义报错,不符合代码规范。
  • 对称位置计算错误:主对角线对称元素的位置应为行下标与列下标互换(即A[i][j]对应A[j][i]),原代码中的A[n-j+1][n-i+1]是针对副对角线的计算逻辑,完全偏离需求。
  • 循环范围逻辑混乱:原循环的范围与条件判断无法准确覆盖需要交换的元素,会导致漏交换或重复交换。

正确实现方案

核心逻辑:对于n阶方阵,只需遍历主对角线右上方(i < j)的元素,与左下方的对称位置(j, i)交换,避免重复操作。

def swap_main_diag_sym(A):
    n = len(A)
    # 遍历主对角线右上方的元素,每个对称对仅交换一次
    for i in range(n):
        for j in range(i + 1, n):
            # 直接交换对称位置元素,无需临时变量
            A[i][j], A[j][i] = A[j][i], A[i][j]
    # 格式化打印结果
    for row in A:
        print(' '.join(f'{num:.3f}' for num in row))
    return A

# 示例调用
if __name__ == "__main__":
    test_matrix = [
        [1.0, 2.0, 3.0],
        [4.0, 5.0, 6.0],
        [7.0, 8.0, 9.0]
    ]
    swapped_matrix = swap_main_diag_sym(test_matrix)

代码要点说明

  • 参数鲁棒性:通过len(A)自动获取方阵阶数n,无需额外传入,适配任意阶数的方阵。
  • 循环优化:仅处理i < j的元素,确保每个对称元素对只交换一次,避免重复操作。
  • 简洁交换:利用Python元组解包特性直接完成元素交换,省去临时变量的定义。
  • 打印优化:用join结合生成器表达式简化格式化打印逻辑,输出更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:52:12