Python按指定格式从上到下打印二维列表的问题求解
解决方法:提取指定位置字符构造目标输出
看起来你是想把这个对称的网格转换成菱形样式的输出对吧?之前用while循环没搞定,大概率是没摸清楚每个目标行对应原网格的位置规律。我帮你拆解一下逻辑,然后给出可行的代码:
首先,先明确原网格的对称特性:行1和行7、行2和行6、行3和行5是完全相同的,行4是中间行。目标输出的每一行,其实是从这些对称行里提取特定位置的0,其余位置补.构造出来的。
实现代码
# 定义原网格 grid = [ ['.', '.', '.', '.', '.', '.'], ['.', '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:取行1和行7的中间两个0 row0 = ['.'] * 10 row0[2], row0[3] = grid[1][1], grid[1][2] row0[5], row0[6] = grid[7][1], grid[7][2] row0_str = ''.join(row0) # 构造目标行1:取行2和行6的前四个0 row1 = ['.'] * 10 row1[1:5] = grid[2][0:4] row1[5:9] = grid[6][0:4] row1_str = ''.join(row1) # 构造目标行2:取行3和行5的前四个0 row2 = ['.'] * 10 row2[1:5] = grid[3][0:4] row2[5:9] = grid[5][0:4] row2_str = ''.join(row2) # 构造目标行3:取中间行4的后五个0 row3 = ['.'] * 10 row3[2:7] = grid[4][1:6] row3_str = ''.join(row3) # 构造目标行4:取行3、4、5的中间列的0 row4 = ['.'] * 10 row4[3], row4[4], row4[5] = grid[3][2], grid[4][2], grid[5][2] row4_str = ''.join(row4) # 构造目标行5:取中间行4的中心0 row5 = ['.'] * 10 row5[4] = grid[4][2] row5_str = ''.join(row5) # 打印最终结果 print(row0_str) print(row1_str) print(row2_str) print(row3_str) print(row4_str) print(row5_str)
代码说明
- 我们先为每个目标行初始化一个长度为10的
.列表(因为目标每行都是10个字符)。 - 根据目标行的样式,把原网格中对应位置的
0替换到列表的指定索引处。 - 最后把列表拼接成字符串,打印出来就是你要的格式。
运行这段代码后,输出完全符合你的要求:
..00.00.. .0000000. .0000000. ..00000.. ...000... ....0....
如果你想用循环的方式实现(比如避免重复代码),也可以把对称行的索引和提取范围整理成一个配置列表,然后遍历生成目标行,比如:
# 配置:每个元素是 (原行索引, 提取范围/位置, 目标位置/切片) configs = [ ((1, slice(1,3), slice(2,4)), (7, slice(1,3), slice(5,7))), ((2, slice(0,4), slice(1,5)), (6, slice(0,4), slice(5,9))), ((3, slice(0,4), slice(1,5)), (5, slice(0,4), slice(5,9))), ((4, slice(1,6), slice(2,7)),), ((3, 2, 3), (4, 2, 4), (5, 2, 5)), ((4, 2, 4),) ] result = [] for parts in configs: row = ['.']*10 for part in parts: if isinstance(part[1], slice): r_idx, g_slice, t_slice = part row[t_slice] = grid[r_idx][g_slice] else: r_idx, g_pos, t_pos = part row[t_pos] = grid[r_idx][g_pos] result.append(''.join(row)) print('\n'.join(result))
这段代码用配置列表来统一管理提取规则,扩展性更好,适合后续调整样式的情况。
内容的提问来源于stack exchange,提问作者user8953265
相关产品推荐
相关产品推荐

