首页 > 解决方案 > 如何使用嵌套的 for 循环在 Python 中从一个列表写入另一个列表?

问题描述

我有两个清单:

import random

board = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
]

boxes = [random.sample(range(1, 10), 9), random.sample(range(1, 10), 9), random.sample(range(1, 10), 9)]

第一个是数独板,第二个是 9 个随机不重复数字的三个列表。我想将随机数插入数独板,所以结果板看起来像这样:

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

我可以用这段代码实现我想要的:

# BOX 1
board[0][0] = boxes[0][0]
board[0][1] = boxes[0][1]
board[0][2] = boxes[0][2]

board[1][0] = boxes[0][3]
board[1][1] = boxes[0][4]
board[1][2] = boxes[0][5]

board[2][0] = boxes[0][6]
board[2][1] = boxes[0][7]
board[2][2] = boxes[0][8]

# BOX 2
board[3][3] = boxes[1][0]
board[3][4] = boxes[1][1]
board[3][5] = boxes[1][2]

board[4][3] = boxes[1][3]
board[4][4] = boxes[1][4]
board[4][5] = boxes[1][5]

board[5][3] = boxes[1][6]
board[5][4] = boxes[1][7]
board[5][5] = boxes[1][8]

# BOX 3
board[6][6] = boxes[2][0]
board[6][7] = boxes[2][1]
board[6][8] = boxes[2][2]

board[7][6] = boxes[2][3]
board[7][7] = boxes[2][4]
board[7][8] = boxes[2][5]

board[8][6] = boxes[2][6]
board[8][7] = boxes[2][7]
board[8][8] = boxes[2][8]

但显然这是一种超级漫长而愚蠢的方法,但看在上帝的份上,我无法弄清楚如何使用嵌套的 for 循环来做到这一点,但它似乎应该是可能的?

我想我至少可以用这段代码填充第一个框:

for x in range(9):
    for y in range(3):
        board[y][x] = boxes[0][x]

但即使这样也不能按预期工作......请帮助......

标签: pythonlistloopsfor-loop

解决方案


这会做到的。如果你愿意使用 numpy,还有更好的方法。

for box in range(3):
    # Get starting location in board.
    dx = box*3
    for k in range(9):
        x = k % 3
        y = k // 3
        board[dx+y][dx+x] = boxes[box][k]

或者:

for box in range(3):
    # Get starting location in board.
    dx = box*3
    for y in range(3):
        for k in range(3):
          board[dx+y][dx+x] = boxes[box][y*3+x]

推荐阅读