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

如何用Python对二维数组进行Zigzag遍历并按行拼接值

解决二维数组的之字形(Zigzag)遍历问题

嘿,我来帮你搞定这个之字形遍历的难题!先明确下咱们要实现的遍历规则(对应你提到的那张图):从数组左上角出发,沿着对角线方向交替切换遍历方向——比如先从左到右走第一行,接着斜向左下遍历下一条对角线,再向下移动一格后斜向右上遍历,以此类推,直到把所有元素都遍历完,最后把这些数值拼接成一行。

实现思路

核心是按对角线分组:二维数组中,每个元素的行索引i和列索引j的和k = i + j相同的元素,都在同一条对角线上。我们只需要遍历所有可能的k值,然后根据k的奇偶性来决定当前对角线的遍历方向:

  • 当k为偶数时:从对角线的最下方元素往最上方遍历
  • 当k为奇数时:从对角线的最上方元素往最下方遍历

代码示例(Python)

假设你的result是一个二维列表(如果是NumPy数组,只需要把索引方式从result[i][j]改成result[i,j]即可):

# 模拟你的输入数组(示例)
result = [
    [0, 0, 0, 0, 1, 0],
    [0, 1, 1, 1, 1, 1],
    [0, 0, 1, 0, 1, 1],
    [0, 0, 0, 0, 0, 1],
    [1, 1, 1, 1, 1, 0],
    [1, 1, 1, 1, 1, 1]
]

rows = len(result)
cols = len(result[0]) if rows > 0 else 0
zigzag_elements = []

# 遍历所有对角线(k从0到rows+cols-2)
for k in range(rows + cols - 1):
    if k % 2 == 0:
        # 偶数对角线:从下往上走
        # 起始行索引:取k和最后一行索引的较小值
        start_i = min(k, rows - 1)
        # 结束行索引:取0和(k - 列数 +1)的较大值,避免列索引越界
        end_i = max(0, k - cols + 1)
        # 倒序遍历行索引,计算对应的列索引j = k - i
        for i in range(start_i, end_i - 1, -1):
            j = k - i
            zigzag_elements.append(str(result[i][j]))
    else:
        # 奇数对角线:从上往下走
        start_i = max(0, k - cols + 1)
        end_i = min(k, rows - 1)
        for i in range(start_i, end_i + 1):
            j = k - i
            zigzag_elements.append(str(result[i][j]))

# 把遍历到的元素拼接成一行(这里用空格分隔,你可以换成空字符串直接拼接)
final_output = ' '.join(zigzag_elements)
print(final_output)

代码说明

  1. 先获取数组的行数和列数,处理空数组的边界情况
  2. 遍历每个对角线的k值,覆盖所有可能的对角线
  3. 根据k的奇偶性切换遍历方向,确保每一条对角线的元素都被正确收集
  4. 最后把收集到的元素转换成字符串并拼接成一行

这样就能完美实现你需要的之字形遍历啦!

内容的提问来源于stack exchange,提问作者Dian Arief R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:10