Python: 原地矩阵转置

3
我尝试编写一个原地转置函数,只是为了练习。有谁能告诉我这个算法的时间和空间复杂度是多少?
from copy import *

def transpose(matrix):
    reference=deepcopy(matrix)
    col_num=len(reference[0])
    row_num=len(reference)
    matrix.clear()

    new=[list(map(lambda x: x[i],reference)) for i in range(col_num)]
    for i in new:
        matrix.append(new)
    return matrix

    x=[[ 1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    y=transpose(x)

编辑:使我的原地转置代码更加简洁

2个回答

3

选项1: 如果它是N x N的方阵,则:

def transpose(matrix):
    # Transpose O(N*N)
    size = len(matrix)
    for i in range(size):
        for j in range(i+1, size):
            matrix[j][i],matrix[i][j] = matrix[i][j],matrix[j][i]

选项 2:用普适的“Pythonic”方式进行操作,方法如下:

mat = [[1,2,3],[4,5,6],[7,8,9]]
transpose = list(zip(*mat))
transpose
>>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

zip函数参考文档


1

对于第二个循环,请更改为以下内容。 在您的代码中,您陷入了一个无限循环。

    for row in matrix: 
        while len(row)!=row_num:
            if len(row)<row_num:
                row.append(0)
            else:
                row.pop()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接