如何不使用numpy生成包含1至n的二维列表?
不用Numpy生成1至n的二维列表解决方案
没问题!不用Numpy的话,咱们用Python基础语法就能轻松实现,核心逻辑就是把1到n的数字按指定的行数/列数逐行分组填充就行。我给你几种实用的实现方式:
方法一:直观双重循环(适合新手理解逻辑)
这是最容易看懂的写法,通过两层循环分别控制行数和每行的元素:
def create_matrix(rows, cols): matrix = [] current_num = 1 # 外层循环创建每一行 for _ in range(rows): current_row = [] # 内层循环填充当前行的每个元素 for _ in range(cols): current_row.append(current_num) current_num += 1 matrix.append(current_row) return matrix # 生成示例中的4x4矩阵 matrix = create_matrix(4, 4) print(matrix) # 输出:[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
逻辑很直白:从数字1开始,每填满一行的所有元素后,就把这行加入到最终的矩阵里,同时更新下一个要填充的数字。
方法二:列表推导式(简洁写法)
如果你喜欢更紧凑的代码,可以用嵌套列表推导式来实现,本质和上面的循环逻辑一样,但写法更优雅:
def create_matrix(rows, cols): # 外层推导式控制行,内层推导式生成每行的元素 return [[i * cols + j + 1 for j in range(cols)] for i in range(rows)] # 调用示例 matrix = create_matrix(4, 4) print(matrix)
这里的计算公式i * cols + j + 1可以快速定位每个位置的数字:
i是当前行的索引(从0开始),i * cols就是当前行第一个数字的前一位- 加上
j+1(j是列索引,从0开始)就能得到当前位置的准确数字
方法三:已知n生成方阵(比如示例的4x4)
如果你的需求是生成方阵(行数=列数),且已知总数字n,可以先计算行列数再生成:
import math def create_square_matrix(n): rows = cols = int(math.sqrt(n)) # 加个校验,确保n是完全平方数,避免生成不完整矩阵 if rows * cols != n: raise ValueError("n必须是完全平方数才能生成方阵哦") return [[i * cols + j + 1 for j in range(cols)] for i in range(rows)] # 用n=16生成4x4矩阵 matrix = create_square_matrix(16) print(matrix)
这种写法会先通过平方根计算行列数,同时校验输入的n是否合法,避免出现行数和列数不匹配的问题。
不管用哪种写法,核心都是按行分组填充连续数字,完全不需要依赖Numpy就能实现你的需求~
内容的提问来源于stack exchange,提问作者Sagnik Sarkar
相关产品推荐
相关产品推荐

