Как из матрицы 9 на 9 выделить 9 матриц размером 3 на 3

Всем привет, как из матрицы 9 на 9 сделать 9 матриц размером 3 на 3 в python , принцип как в судоку, например из:

[[1,2,3,4,5,6,7,8,9]
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9],
 [1,2,3,4,5,6,7,8,9]]

В такую ->

[[1,2,3,1,2,3,1,2,3],
 [1,2,3,1,2,3,1,2,3],
 [1,2,3,1,2,3,1,2,3],
 [4,5,6,4,5,6,4,5,6],
 [4,5,6,4,5,6,4,5,6],
 [4,5,6,4,5,6,4,5,6],
 [7,8,9,7,8,9,7,8,9],
 [7,8,9,7,8,9,7,8,9],
 [7,8,9,7,8,9,7,8,9]] 

Ответы (2 шт):

Автор решения: Qwertiy

https://ideone.com/Zm0vMz
https://ideone.com/PALFZb

a = [
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9],
  [1,2,3,4,5,6,7,8,9]
]

b = [[x for r in a[i:i+3] for x in r[j:j+3]] for j in range(0,9,3) for i in range(0,9,3)]

print(b)
→ Ссылка
Автор решения: вася

9 матриц 3x3:

class Matrix(list):
    def __init__(self, *args):
        list.__init__(self, *args)

    def __getitem__(self, item):
        try:
            return list.__getitem__(self, item)
        except TypeError:
            rows, cols = item
            return [row[cols] for row in self[rows]]

def split(a, n, m):
    for i in range(0, len(a), n):
        for j in range(0, len(a[0]), m):
            yield a[i:i+n,j:j+m]

# matrix = Matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9], 
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9],
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9], 
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9],
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9], 
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9],
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9], 
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9],
#                  [1, 2, 3, 4, 5, 6, 7, 8, 9]])
 
matrix = Matrix([[1, 2, 3, 1, 2, 3, 1, 2, 3],
                 [4, 5, 6, 4, 5, 6, 4, 5, 6],
                 [7, 8, 9, 7, 8, 9, 7, 8, 9], 
                 [1, 2, 3, 1, 2, 3, 1, 2, 3],
                 [4, 5, 6, 4, 5, 6, 4, 5, 6], 
                 [7, 8, 9, 7, 8, 9, 7, 8, 9],
                 [1, 2, 3, 1, 2, 3, 1, 2, 3], 
                 [4, 5, 6, 4, 5, 6, 4, 5, 6],
                 [7, 8, 9, 7, 8, 9, 7, 8, 9]])

matrices = list(split(matrix, 3, 3))

import pprint

pprint.pprint(matrices)
→ Ссылка