A ver, la diagonal no es necesario un doble for, ya que como i=j, con i filas j columnas con uno basta, ADEMÁS una matriz tiene diagonal si esta es cuadrada, es decir, misma cantidad de filas y columnas
Código Python:
Ver originalM1 = [[1, 2, 3, 4], [2, 12, 6, 12], [1, 0, -3, 4], [10, -1, 0, 1]]
M2 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
for i in range(0,len(M1),1):
M2[i][i] = M1[i][i]
Y la traspuesta es cambiar las filas por columas, acá no hay restricción.
Código Python:
Ver originalM1 = [[1, 2, 3, 4], [2, 12, 6, 12], [1, 0, -3, 4]]
M2 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
for i in range(0,len(M1),1):
for j in range(0,len(M1[i]),1):
M2[j][i] = M1[i][j]
Edite: tenia error de sintaxis en el último for de matriz traspuesta