数独子方格生成

2024-04-19 08:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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个子方格也是这样。有没有其他更简单的方法。在

数独:

^{pr2}$

所以第一个次方列表是:

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

Tags: 方法代码in列表forrangelistsquare
3条回答

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

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和{}分别是每个子方格的高度和宽度。(出于您的目的,h和{}都等于3。在

如果您不反对第三方库,请使用numpy

import numpy as np

board = np.array([
    [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]])

print(board)
print()
print(board[3,1])     # 4th row, 2nd column
print()
print(board[3])       # 4th row
print()
print(board[...,2])   # 3rd column
print(board[:,2:3])   # 3rd column (another way)
print()
print(board[0:3,0:3]) # first sub-square
print(board[0:3,0:3].flatten()) # another way

输出

^{pr2}$
for y in range(0,3):

for y in range(3,6):

for y in range(6,9):

如果你看一下你的三个代码块,除了上面引用的行之外,它们是完全相同的。这意味着您可以用另一个循环中的单个代码块替换它们,该循环用作y循环范围的参数。然后需要第四个循环,它用作x循环范围的参数。然后,您将得到与Joel的答案大致相同的结果,尽管他使用了迭代器,以便可以将其全部分解为一行代码。在

相关问题 更多 >