python - 如何使用嵌套的 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]
但即使这样也不能按预期工作......请帮助......
解决方案
这会做到的。如果你愿意使用 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]
推荐阅读
- django - 如何允许 auth 用户从 django admin 发送时事通讯
- kubernetes - 在 Kubernetes 中为 Master 配置 AWS publicIP
- c++ - 如何从向量迭代的变换构造元组
- javascript - Javascript FileReader 如何访问 reader.onload?
- java - 无法识别 EditText 变量的值(appcompat 错误)并成功转换编辑文本
- postgresql - 如何修复 postgreSQL 卸载?
- javascript - 防止点击 mouseup
- javascript - 希望重命名 Django Ajax “like”按钮,但不工作
- unit-testing - Vue.js unit:test :有没有办法模拟 Vee-Validate 验证器插件?
- java - 如何将数组的索引打印到单独的 ArrayList 中