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

不使用numpy实现矩阵列交换的Python函数编写问题

问题分析与代码修正

原代码存在的问题

  • 函数定义行末尾缺少冒号,属于Python语法错误,直接无法运行
  • 变量命名冲突:循环变量i和传入的参数i重名,会覆盖传入的列下标参数
  • 逻辑完全错误:原代码混淆了行和列的下标,实际尝试交换的是M[i][j]和M[j][i],这是交换矩阵的两个对称位置元素,不是交换整列
  • 返回值错误:返回的是临时变量N,而非修改后的矩阵
  • 下标使用错误:rows = M[i]是取第i行,不是获取矩阵行数,for i in M遍历出来的i是行对象,不能直接当下标使用

修正后的代码

Python原生二维列表是按行存储的,交换两列的核心逻辑是遍历每一行,交换当前行对应列下标的两个元素即可。

版本1:直接修改原矩阵

def swap_columns(M, i, j):
    # 遍历矩阵的每一行
    for row in M:
        # 交换当前行的第i列和第j列元素
        row[i], row[j] = row[j], row[i]
    # 返回修改后的矩阵
    return M

版本2:不修改原矩阵,返回新矩阵

如果不希望改变原始矩阵的内容,可以用这个版本:

def swap_columns(M, i, j):
    new_matrix = []
    for row in M:
        # 复制当前行避免修改原数据
        new_row = row.copy()
        new_row[i], new_row[j] = new_row[j], new_row[i]
        new_matrix.append(new_row)
    return new_matrix

补充说明

如果传入的i、j是从1开始计数的列号(而非Python默认的0基下标),只需要在函数开头添加两行代码转换下标即可:

i -= 1
j -= 1

测试示例

# 测试矩阵
M = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
# 交换第0列和第2列
result = swap_columns(M, 0, 2)
print(result)
# 输出:[[3, 2, 1], [6, 5, 4], [9, 8, 7]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:03