Skip to main content
 首页 » 编程设计

python之数独子方 block 生成

2025年05月04日19lori

我有一个 9x9 数独板。我必须创建 9 个子方列表。我将这些列表中的每一个作为一行存储在另一个名为 sub_square 的列表中。

代码:

sub_square = [] 
sub_list = [] 
for x in range(0,3): 
    for y in range(0,3): 
        sub_list.append(sudoku[x][y]) 
 
sub_square.append(sub_list) 
sub_list = [] 
 
for x in range (0,3): 
    for y in range(3,6): 
        sub_list.append(sudoku[x][y]) 
 
sub_square.append(sub_list) 
sub_list = [] 
 
for x in range (0,3): 
    for y in range(6,9): 
        sub_list.append(sudoku[x][y]) 
 
sub_square.append(sub_list) 
sub_list = [] 

我对其他 6 个子方 block 执行相同的操作。有没有其他更简单的方法。

数独:

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

所以第一个子方 block 列表是:

[0, 9, 4, 0, 0, 7, 0, 0, 1] 

请您参考如下方法:

是的,有一个更简单的方法:

subsquares = [[sudokuSquare[j][i] for j in range(x, x + w) for i in range(y, y + h)] for x in range(0, 9, 3) for y in range(0, 9, 3)] 

h 和 w 分别是每个子正方形的高度和宽度。 (对于您的目的,h 和 w 都等于 3。