Преобразовать двумерный массив (длина 9) в сетки 3 x 3 (9 элементов) - PullRequest
0 голосов
/ 06 октября 2019

У меня есть двумерный массив, представляющий серию значений строк в таблице, показанной ниже:

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

Мне нужно было получить значения столбцов из того же списка, и я смог сделать это с помощью

map(list, zip(*arr))
and got this:

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

Теперь мне нужно создать похожий двумерный массив, который содержит 3 х 3 элемента сетки, и результат должен выглядеть примерно так:

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

Я попытался объединить 3 элемента и повторить3 ряда, но я ничего не получил

x = 3
for i in range(x):
  map(list, zip(*arr)[0,1,2])
  x += 3

1 Ответ

0 голосов
/ 06 октября 2019

Для примера с вложенными циклами, в любом случае:

def get_3x3_grids(arr):
    grids = []
    for r in range(0, 9, 3):
        for c in range(0, 9, 3):
            grids_row = []
            for row in range(r, r + 3):
                grids_row += arr[row][c:c + 3]
            grids.append(grids_row)

    return grids
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...