La matriz simétrica de Python gira 90 grados en el sentido de las agujas del reloj

Método 1: este método comienza a leer desde la esquina inferior derecha hacia arriba y luego lee hacia la izquierda, pero la complejidad del tiempo es demasiado alta, se recomienda ver el método 2

# 把对称矩阵顺时针旋转90度
# 该法问从左下角往上读取,再重新构造矩阵,时间复杂度叫高
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
# 旋转为
        # [[7,4,1],
        #  [8,5,2],
        #  [9,6,3]]
lt = []
le = 0  # len(matrix)


def printInfo(mat):
    i = 0
    while i < le:
        j = 0
        while j < le:
            if j == le-1:
                print(mat[i][j], end="")
            else:
                print(mat[i][j], end="  ")
            j += 1
        print()
        i += 1


def change_matrix(mat):
    rotating_matrix = [[1 for j in range(le)] for i in range(le)]
    i = le - 1
    j = 0
    for x in range(le * le):  # 每次从左向右从下往上读取即可
        if i == -1:
            i = le - 1
            j = j + 1
        lt.append(mat[i][j])
        i = i - 1
    ind = 0
    for k in range(0, le):
        for y in range(0, le):
            r = lt[ind]
            rotating_matrix[k][y] = r
            ind += 1
    return rotating_matrix


def input_matrix(mat):
    for i in range(0, le):
        mat[i] = input().split(" ")
    return mat


if __name__ == '__main__':
    le = int(input())

    matrix = [[0] * le] * le
    matrix = input_matrix(matrix)
    rotating_matrix = change_matrix(matrix)
    printInfo(rotating_matrix)

Método 2: voltear primero la diagonal principal (esquina superior izquierda - esquina inferior derecha) y luego voltear horizontalmente (izquierda y derecha)

# 先对角线交换,再垂直交换
# [[2,3,4],
# [5,6,7],
# [8,9,1]]
# 翻转90度为
# [[8,5,2],
# [9,6,3],
# [1,7,4]]
# 1先对角线翻转为
# [[2,5,8],
# [3,6,9],
# [4,7,1]]
# 2再水平翻转
# [[8,5,2],
# [9,6,3],
# [1,7,4]]
# 4*4
# [[8,5,2,9],
#  [9,6,3,8],
#  [1,7,4,4],
#  [1,7,4,4]]

# 几层矩阵值,矩阵
def rotatin(n, matrix):
    mat = matrix
    # 对角线翻转
    # 0,0 0,1<=>1,0 0,2<=>2,0
    for i in range(n):
        for j in range(n - i):
            mat[i][j + i], mat[j + i][i] = mat[j + i][i], mat[i][j + i]
    # 水平翻转
    for x in range(n):
        for y in range(n // 2):  # 第一个与倒数第一个交换
            mat[x][y], mat[x][-y - 1] = mat[x][-y - 1], mat[x][y]
    return mat


if __name__ == '__main__':
    n = int(input("输入矩阵数:"))
    # matrix = [[2, 3, 4],
    #           [5, 6, 7],
    #           [8, 9, 1]]
    matrix = []
    for i in range(n):
        lt = list(map(int, input("第" + str(i + 1) + "行矩阵:").split(" ")))
        matrix.append(lt)
    matr = rotatin(n, matrix)
    for i in range(n):
        for j in range(n):
            if j == n - 1:
                print(matr[i][j], end="")
            else:
                print(matr[i][j], end="  ")
        print()

resultado de ejecución

 

Supongo que te gusta

Origin blog.csdn.net/baidu_39105563/article/details/121950809
Recomendado
Clasificación