You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python与JavaScript实现数独求解器for循环运行结果不一致问题求助

问题原因

你遇到的是Python列表初始化的经典坑:rows=[{}]*n、cols=[{}]*n、boxes=[{}]*n这种写法,并不会创建n个独立的空字典,而是生成了n个指向同一个字典对象的引用。修改任意下标的字典内容,本质都是修改同一个字典,所以最后所有位置的字典内容完全一致,存了所有出现过的数字。
对比你的JS代码,JS是循环单独给每个下标赋值{},每个都是独立的对象,所以运行正常。

修复方案

把三个列表的初始化改为用列表推导式生成独立字典即可,修改后的Python代码如下:

import math
def get_box_id(r,c):
    row=int(math.floor(r/3)*3)
    col=int(math.floor(c/3))
    return row+col
def solve_sudoku(board):
    n=len(board)
    # 用列表推导式生成n个独立的空字典
    rows = [{} for _ in range(n)]
    cols = [{} for _ in range(n)]
    boxes = [{} for _ in range(n)]
    for r in range(n):
        for c in range(n):  
            if board[r][c]!='.':
                box_id=get_box_id(r,c)     
                val=board[r][c]
                boxes[box_id][val]=True
                rows[r][val]=True
                cols[c][val]=True
    print(rows)

board = [
  ["5", "3", ".", ".", "7", ".", ".", ".", "."],
  ["6", ".", ".", "1", "9", "5", ".", ".", "."],
  [".", "9", "8", ".", ".", ".", ".", "6", "."],
  ["8", ".", ".", ".", "6", ".", ".", ".", "3"],
  ["4", ".", ".", "8", ".", "3", ".", ".", "1"],
  ["7", ".", ".", ".", "2", ".", ".", ".", "6"],
  [".", "6", ".", ".", ".", ".", "2", "8", "."],
  [".", ".", ".", "4", "1", "9", ".", ".", "5"],
  [".", ".", ".", ".", "8", ".", ".", "7", "9"],
]
solve_sudoku(board)

运行修改后的代码,输出的rows结果就会和JS版本完全一致。

内容的提问来源于stack exchange,提问作者Yilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:04