Если вы собираетесь выполнять много линейных алгебраических операций, NumPy / SciPy станет вашим другом.Для конкретной проблемы создания блочных диагональных матриц scipy.linalg.block_diag
сохраняет день:
In [14]: from scipy.linalg import block_diag
In [16]: A = [[1, 2],
...: [3, 4]]
...:
In [17]: B = [[5, 6, 7],
...: [8, 9, 60],
...: [10, 20, 0]]
...:
In [18]: block_diag(A, B)
Out[18]:
array([[ 1, 2, 0, 0, 0],
[ 3, 4, 0, 0, 0],
[ 0, 0, 5, 6, 7],
[ 0, 0, 8, 9, 60],
[ 0, 0, 10, 20, 0]], dtype=int32)
В противном случае (правка: отметив, что вопрос в его первоначальной форме фактически не указывал, чтожелаемое решение включало NumPy), если вы просто хотите сделать это с ванильным Python, предполагая, что все блоки квадратные, вы можете сделать что-то вроде
[a + [0]*len(B) for a in A] + [[0]*len(A) + b for b in B]