矩阵转置

GitHub跳转原题关系图返回列表

用 zip 解包矩阵行并按列组合,直接输出转置矩阵。

OJ: noi_openjudge

题目 ID: ch0108-10

难度:入门

标签:矩阵数组python

日期: 2026-07-30 23:01

题意

输出 n×mn\times m 矩阵的转置,即将行和列互换。

思路

zip(*matrix) 将所有行解包并按相同列下标组合,每个得到的元组就是转置矩阵的一行。

代码

cpp
#include <cstdio>

int n,m,k;
int a[200][200];
int b[200][200];
int c[200][200];
int main(){
    int i,j;
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }

    for (j=1;j<=m;j++){
        for (i=1;i<=n;i++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

复杂度

总结

Python代码

python
row_count, column_count = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(row_count)]

for column in zip(*matrix):
    print(*column)

C++代码

cpp
#include <cstdio>

int n,m,k;
int a[200][200];
int b[200][200];
int c[200][200];
int main(){
    int i,j;
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }

    for (j=1;j<=m;j++){
        for (i=1;i<=n;i++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

复杂度

时间复杂度为 O(nm)O(nm),矩阵输入空间为 O(nm)O(nm)

总结

zip(*matrix) 是规则二维列表转置的简洁 Python 写法。