Python动态嵌套数组实现报错:IndexError: list index out of range
Python动态嵌套数组实现报错:IndexError: list index out of range
嘿,我来帮你排查这个问题~
你遇到的IndexError根源在于数组初始化的方式不对。咱们先看你原代码里的这一行:
ar = [[]]
这行代码只创建了一个包含单个空列表的一维数组,而不是你想要的rows行的二维数组。
当循环执行到i=1(也就是第二行)的时候,你尝试访问ar[i],但此时ar里只有ar[0]这一个元素,自然就会抛出“索引越界”的错误。而且就算是i=0的第一次循环,ar[0]是空列表,你直接赋值ar[0][j] = i+j也会报错,因为空列表里根本没有第j个位置可以赋值。
修正方案
这里给你两种靠谱的实现方式:
方式一:分步初始化+填充
先创建包含rows个独立空列表的数组,再通过append逐个添加元素:
def pop_array(rows, cols): ar = [[] for _ in range(rows)] # 初始化rows个独立的空列表 for i in range(rows): for j in range(cols): ar[i].append(i + j) # 向每行的列表中添加元素 return ar rows = 3 cols = 4 result = pop_array(rows, cols) print(result)
方式二:用列表推导式(更简洁)
Python的列表推导式可以一行搞定二维数组的创建和填充,可读性也很强:
def pop_array(rows, cols): return [[i + j for j in range(cols)] for i in range(rows)] rows = 3 cols = 4 result = pop_array(rows, cols) print(result)
注意避坑
别用ar = [[]] * rows这种方式初始化,这会让所有行都指向同一个空列表的引用——修改任意一行的元素,其他行都会跟着变,这肯定不是你想要的结果。
运行修正后的代码,你会得到预期的二维数组:
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
备注:内容来源于stack exchange,提问作者LuminaNtb
相关产品推荐
相关产品推荐

