如何用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
相关产品推荐
相关产品推荐

