如何将列表添加到列表列表中?

2024-07-01 08:01:17 发布

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

我想要一个数独游戏,我想把它变成一个数独游戏。数独网格是一个尚未解决的难题。它只是一个二维列表。list availableNumbers应该是一个3d列表,其中每个空单元格(在sudokuGrid中用0表示)应该有一个数字为1-9的列表。 如何添加列表?在

sudokuGrid = []
sudokuGrid.append([0, 0, 8, 0, 0, 0, 0, 1, 0])
sudokuGrid.append([0, 9, 0, 0, 0, 0, 0, 0, 0])
sudokuGrid.append([3, 4, 0, 5, 9, 0, 0, 0, 7])
sudokuGrid.append([6, 8, 0, 0, 0, 0, 4, 0, 0])
sudokuGrid.append([0, 0, 0, 0, 7, 0, 0, 0, 0])
sudokuGrid.append([0, 0, 4, 8, 0, 0, 1, 0, 0])
sudokuGrid.append([0, 0, 6, 0, 8, 0, 0, 0, 5])
sudokuGrid.append([0, 5, 1, 0, 0, 0, 0, 2, 0])
sudokuGrid.append([0, 0, 0, 0, 2, 0, 0, 9, 0])

availableNumbers = []

for i in range (9):
    for j in range(9):
        if sudokuGrid[i][j] == 0:
            availableNumbers[i][j][k] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        else:
            availableNumbers[i][j][k] = sudokuGrid[i][j]
            break

我得到一个错误,说列表索引超出范围。在


Tags: in网格游戏列表forifrange数字
2条回答

您需要初始化您的availableNumbers列表,使其具有与您试图索引到的相同维度,以便添加值。由于空列表中不存在availableNumbers[i][j][k],因此出现索引错误。另外,您没有将k定义为任何内容。有一种更简单的方法来实现这一点,而不需要初始化空列表。只需使用copy模块,复制一个sudokuGrid,并用它们的潜在值列表替换所有的0元素。在

import copy
sudokuGrid = []
sudokuGrid.append([0, 0, 8, 0, 0, 0, 0, 1, 0])
sudokuGrid.append([0, 9, 0, 0, 0, 0, 0, 0, 0])
sudokuGrid.append([3, 4, 0, 5, 9, 0, 0, 0, 7])
sudokuGrid.append([6, 8, 0, 0, 0, 0, 4, 0, 0])
sudokuGrid.append([0, 0, 0, 0, 7, 0, 0, 0, 0])
sudokuGrid.append([0, 0, 4, 8, 0, 0, 1, 0, 0])
sudokuGrid.append([0, 0, 6, 0, 8, 0, 0, 0, 5])
sudokuGrid.append([0, 5, 1, 0, 0, 0, 0, 2, 0])
sudokuGrid.append([0, 0, 0, 0, 2, 0, 0, 9, 0])

availableNumbers = copy.deepcopy(sudokuGrid)

for i in range(0, len(availableNumbers)):
    for x in range(0, len(availableNumbers[i])):
        if availableNumbers[i][x] == 0:
            availableNumbers[i][x] = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(availableNumbers)

输出:

^{pr2}$

{cd1>你可以做一些小的改变:

sudokuGrid = []
sudokuGrid.append([0, 0, 8, 0, 0, 0, 0, 1, 0])
sudokuGrid.append([0, 9, 0, 0, 0, 0, 0, 0, 0])
sudokuGrid.append([3, 4, 0, 5, 9, 0, 0, 0, 7])
sudokuGrid.append([6, 8, 0, 0, 0, 0, 4, 0, 0])
sudokuGrid.append([0, 0, 0, 0, 7, 0, 0, 0, 0])
sudokuGrid.append([0, 0, 4, 8, 0, 0, 1, 0, 0])
sudokuGrid.append([0, 0, 6, 0, 8, 0, 0, 0, 5])
sudokuGrid.append([0, 5, 1, 0, 0, 0, 0, 2, 0])
sudokuGrid.append([0, 0, 0, 0, 2, 0, 0, 9, 0])

availableNumbers = []

for i in range (9):
    availableNumbers.append([])
    for j in range(9):
        availableNumbers[i].append([])
        if sudokuGrid[i][j] == 0:
            availableNumbers[i][j] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        else:
            availableNumbers[i][j] = sudokuGrid[i][j]

for a in availableNumbers:
    print(a)

通过在每个循环的开始处附加到availableNumbers或{}中,我们可以确保在availableNumbers中有一些可以存储变量的空间。这样,除了删除break语句并删除k的内容,将得到以下(逐行)输出:

^{pr2}$

相关问题 更多 >

    热门问题