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

Python实现:将无分隔符数字字符串转换为9x9二维列表

无分隔符数字字符串转9x9数独二维列表的解决方案

你的代码问题出在哪

  • 两种写法都没预先创建9x9的空二维列表,直接访问list1[i][j]必然触发索引越界——空列表里根本不存在这些位置。
  • 三层循环逻辑完全混乱:你反复把整个字符串的所有字符往每个格子里塞,这完全不是按顺序填充数独的正确逻辑。

正确的实现方式

方式1:嵌套循环(新手友好,逻辑清晰)

先初始化一个9行9列的二维列表,再按顺序遍历字符串的每个字符,计算对应的行和列索引填充进去:

numbers = '084030001560014000001586704420001070005309802900200043100078005006105407000490000'
# 先创建9x9的空二维列表,初始值设为0
sudoku = [[0 for _ in range(9)] for _ in range(9)]

for idx in range(len(numbers)):
    row = idx // 9  # 每9个字符占一行,整除9得到行号
    col = idx % 9   # 取余9得到当前行的列号
    sudoku[row][col] = int(numbers[idx])

print(sudoku)

方式2:列表推导式(简洁高效,Python风格)

用切片把字符串分成9段(每段9个字符),再将每个字符转为整数:

numbers = '084030001560014000001586704420001070005309802900200043100078005006105407000490000'
# 写法1:按索引计算每个位置
sudoku = [[int(numbers[i*9 + j]) for j in range(9)] for i in range(9)]

# 写法2:直接切片取每行,更直观
sudoku = [[int(c) for c in numbers[i*9 : (i+1)*9]] for i in range(9)]

方式3:分步拆解(适合理解过程)

如果觉得列表推导式太紧凑,分步操作更清晰:

numbers = '084030001560014000001586704420001070005309802900200043100078005006105407000490000'
sudoku = []
for i in range(9):
    # 从字符串中截取第i行的9个字符
    row_chars = numbers[i*9 : (i+1)*9]
    # 把每个字符转成整数,组成一行的列表
    row = [int(char) for char in row_chars]
    # 将该行加入数独列表
    sudoku.append(row)

结果验证

以上三种方法都会生成标准的9x9二维列表,每个元素对应数独的一个格子(0代表空白),完全满足数独求解器的后续开发需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:07:25