如何在Python中让数独棋盘嵌套列表的每个子列表单独换行打印
解决数独棋盘嵌套列表的换行打印问题
基础方案:逐个打印子列表
最简单的方式就是遍历棋盘的每一行(子列表),单独打印每一行:
board = [ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 2], [0, 0, 0, 3, 0, 3, 0, 0, 0], [0, 0, 5, 0, 0, 0, 0, 0, 0], [0, 8, 0, 0, 0, 6, 0, 5, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 9, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0] ] # 遍历每行打印 for row in board: print(row)
这样每个子列表会单独占一行,输出结构和你定义棋盘的格式一致。
简洁方案:用字符串拼接实现换行
如果不想写循环,可以把每个子列表转成字符串后用换行符连接,一次性打印:
print('\n'.join(map(str, board)))
map(str, board)会把每个子列表转换成字符串,'\n'.join()用换行符把这些字符串连起来,打印时自然每行一个子列表。
进阶方案:打印成标准数独格式
如果想让输出更像真实的数独棋盘,还可以添加分隔线和对齐格式,区分3x3的区块:
def print_sudoku(board): for i, row in enumerate(board): # 每3行打印一条分隔线(第一行不打印) if i % 3 == 0 and i != 0: print('- ' * 11) # 处理每行的数字,每3个数字加一个竖线分隔 formatted_row = [] for j, num in enumerate(row): if j % 3 == 0 and j != 0: formatted_row.append('|') formatted_row.append(str(num)) print(' '.join(formatted_row)) print_sudoku(board)
这个方法的输出会更直观,示例效果:
0 0 0 | 0 0 0 | 0 0 0 0 2 0 | 0 0 0 | 0 0 2 0 0 0 | 3 0 3 | 0 0 0 - - - - - - - - - - - 0 0 5 | 0 0 0 | 0 0 0 0 8 0 | 0 0 6 | 0 5 0 0 0 0 | 0 0 0 | 0 0 0 - - - - - - - - - - - 0 0 0 | 2 0 0 | 0 0 0 0 0 0 | 0 0 0 | 0 9 0 0 0 0 | 1 0 0 | 0 0 0
内容的提问来源于stack exchange,提问作者DM23545
相关产品推荐
相关产品推荐

