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

如何以最基础的方式查找网格中的所有对角线(不使用Numpy、Itertools及复杂内置函数)

实现网格中所有右上到左下对角线的基础Python方案

我明白你想要找出网格中所有右上到左下方向的对角线,而且希望用最基础的Python代码完成,不依赖任何额外库。你的当前代码只提取了其中一条对角线的元素,接下来我会帮你实现完整的逻辑。

核心思路

这类对角线的核心特征是:每个对角线上的元素,其行索引与列索引的差值是固定值(我们称这个差值为d)。对于m行n列的网格,d的取值范围是从m-1(最大行索引)到-(n-1)(最小的负列索引差值)。我们可以分两部分遍历这些d值,收集每个差值对应的所有元素:

  1. 从d = m-1递减到0:处理从左下角开始、向右上方延伸的对角线
  2. 从d = -1递减到-(n-1):处理从主对角线右侧开始、向右上方延伸的短对角线

完整代码

def get_all_diagonals(grid):
    # 处理空网格的边界情况
    if not grid:
        return []
    
    m = len(grid)  # 网格的行数
    n = len(grid[0])  # 网格的列数
    diagonals = []
    
    # 第一部分:处理d从m-1到0的对角线(左下到右上,长度从1到最大)
    for d in range(m-1, -1, -1):
        current_diagonal = []
        row = d
        col = 0
        # 遍历当前对角线的所有元素,行和列同步递增
        while row < m and col < n:
            current_diagonal.append(grid[row][col])
            row += 1
            col += 1
        # 将当前对角线的元素拼接成字符串加入结果
        diagonals.append(''.join(current_diagonal))
    
    # 第二部分:处理d从-1到-(n-1)的对角线(主对角线右侧,长度从最大-1到1)
    for d in range(-1, -(n), -1):
        current_diagonal = []
        row = 0
        col = -d  # d是负数,-d对应起始列索引
        # 遍历当前对角线的所有元素,行和列同步递增
        while row < m and col < n:
            current_diagonal.append(grid[row][col])
            row += 1
            col += 1
        diagonals.append(''.join(current_diagonal))
    
    return diagonals

# 测试用网格
test = [
    ["r","a","w","b","i","t"],
    ["x","a","y","z","c","h"],
    ["p","q","b","e","i","e"],
    ["t","r","s","b","o","g"],
    ["u","w","x","v","i","t"],
    ["u","w","x","v","i","t"]
]

# 输出结果
print(get_all_diagonals(test))

输出结果

运行上述代码后,你会得到:

['u', 'uw', 'twx', 'prxv', 'xqsvi', 'rabbit', 'ayeot', 'wzig', 'bce', 'ih', 't']

这完全匹配你期望的输出格式(每个元素对应一条对角线的字符串形式)。

你的原有代码问题说明

你之前的代码只提取了d=-1这条对角线的元素(行索引-列索引=-1,即行=列-1),所以只能得到['a', 'y', 'e', 'o', 't']。而上面的代码通过遍历所有可能的差值d,收集了所有对角线的元素,实现了完整需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:47:28