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

如何用Python生成蛇形排列的n×n二维矩阵?

Python实现蛇形n×n矩阵生成函数

要实现奇数行左到右填充、偶数行右到左填充的蛇形矩阵,有两种直观的实现思路,以下分别给出代码和说明:

方法一:直接按行生成目标序列

这种方式在遍历每行时,直接根据行的奇偶性生成对应顺序的数字列表,无需后续修改:

def generate_snake_matrix(n):
    matrix = []
    current_num = 1
    for row_num in range(1, n + 1):
        # 计算当前行的起始和结束数字
        start = current_num
        end = current_num + n - 1
        if row_num % 2 == 1:
            # 奇数行:左到右填充
            row = list(range(start, end + 1))
        else:
            # 偶数行:右到左填充
            row = list(range(end, start - 1, -1))
        matrix.append(row)
        current_num = end + 1
    return matrix

# 验证示例
print(generate_snake_matrix(3))  # 输出: [[1, 2, 3], [6, 5, 4], [7, 8, 9]]
print(generate_snake_matrix(4))  # 输出: [[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]

代码说明

  • 用current_num跟踪当前要填充的起始数字,每行固定包含n个数字,因此通过start和end锁定当前行的数字范围
  • 行号从1开始计数,奇数行直接生成升序列表,偶数行生成降序列表
  • 每行填充完成后,更新current_num为下一行的起始数字(当前行最后一个数字+1)

方法二:先生成常规矩阵,再反转偶数行

如果已经能实现常规逐行填充的矩阵,也可以在此基础上反转偶数行来得到蛇形矩阵:

def generate_snake_matrix(n):
    # 生成常规逐行填充的矩阵
    regular_matrix = []
    current_num = 1
    for _ in range(n):
        row = list(range(current_num, current_num + n))
        regular_matrix.append(row)
        current_num += n
    # 反转偶数行(行索引从0开始,因此反转索引为奇数的行)
    for i in range(n):
        if i % 2 == 1:
            regular_matrix[i] = regular_matrix[i][::-1]
    return regular_matrix

# 验证示例
print(generate_snake_matrix(3))  # 输出: [[1, 2, 3], [6, 5, 4], [7, 8, 9]]
print(generate_snake_matrix(4))  # 输出: [[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]

代码说明

  • 第一步先构建常规的左到右填充矩阵,逻辑和你已实现的代码一致
  • 第二步遍历矩阵,对索引为奇数的行(对应题目中的偶数行)使用切片[::-1]进行反转,快速实现蛇形排列

两种方法都能满足需求,第一种更直接,第二种复用了你已有的常规矩阵生成逻辑,可根据实际场景选择。

内容的提问来源于stack exchange,提问作者Fuke B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:15:34