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

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)

代码说明

  1. 我们先为每个目标行初始化一个长度为10的.列表(因为目标每行都是10个字符)。
  2. 根据目标行的样式,把原网格中对应位置的0替换到列表的指定索引处。
  3. 最后把列表拼接成字符串,打印出来就是你要的格式。

运行这段代码后,输出完全符合你的要求:

..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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:51