Python二维数组赋值报IndexError列表索引超出范围错误如何解决?
问题原因分析
- 核心错误是你初始化的
B是空列表,Python的列表不支持自动为不存在的索引位置创建元素,你尝试直接给B[i*2][0]赋值时,B[i*2]这个外层索引对应的子列表本身就不存在,因此触发IndexError。 - 即便你提前创建了外层的B列表,内层的子列表也需要先初始化才能通过索引赋值,否则同样会触发索引越界错误。
修复方案
方案1:使用append动态添加元素(最简洁)
直接按顺序构造每一行的子列表,追加到B中即可,代码如下:
A = [3, 4] B = [] for i in range(len(A)): B.append([5, 6, 7]) B.append([10, 10, 10])
运行后B即为你期望的[[5,6,7], [10,10,10], [5,6,7], [10,10,10]]。
方案2:预初始化矩阵结构后赋值
如果你需要保留通过索引赋值的写法,可以先提前创建好对应维度的初始矩阵,再修改对应位置的值:
A = [3, 4] # 预初始化4行3列的矩阵,初始值可自定义 B = [[0]*3 for _ in range(len(A)*2)] for i in range(len(A)): B[i*2][0] = 5 B[i*2][1] = 6 B[i*2][2] = 7 B[i*2 +1][0] = 10 B[i*2 +1][1] = 10 B[i*2 +1][2] = 10
注意:预初始化二维列表时不要使用
B = [[0]*3]*4的写法,该写法会生成4个指向同一个子列表的引用,修改任意一行都会同步修改所有行的内容。
内容的提问来源于stack exchange,提问作者Doron Raz
相关产品推荐
相关产品推荐

