Python中使用嵌套循环输入二维数组时遇索引越界错误求助
解决Python二维数组赋值的"list index out of range"错误
你的代码出现索引越界错误,核心问题出在二维列表的初始化方式,以及后续的赋值逻辑上,具体修正如下:
1. 错误根源分析
prices= [ [] *8] *20完全没创建出你需要的8行20列结构:[]*8结果还是空列表(空列表乘任何整数都是空);*20是把这个空列表复制20次,但所有元素都指向同一个空列表,而且整个prices只有20个空列表元素,后续循环访问prices[page][price]时,prices[page]是空列表,自然没有price对应的索引,触发报错。
- 循环里用
.append()的逻辑也不对:你想给指定位置赋值,但空列表没有对应索引,应该先构建好结构,再赋值或逐行追加元素。
2. 修正后的代码方案
方案一:逐行追加元素(适合动态构建)
# 初始化8个独立的空列表,对应8页 prices = [[] for _ in range(8)] images = [] for i in range(1,8): images.append(i) for page in range(8): for _ in range(20): # 往当前页的列表里添加20个输入内容 prices[page].append(input())
方案二:预先初始化结构再赋值(类似Java的二维数组)
如果你想预先固定8行20列的结构,再给每个位置赋值,可以这样写:
# 初始化8行,每行20个占位元素的二维列表 prices = [[None for _ in range(20)] for _ in range(8)] images = [] for i in range(1,8): images.append(i) for page in range(8): for price_idx in range(20): # 给指定位置直接赋值输入内容 prices[page][price_idx] = input()
关键注意点
Python里创建二维列表,必须用列表推导式生成独立的子列表,比如[[] for _ in range(n)],而不能用[[]]*n——后者会导致所有子列表指向同一个内存地址,修改一个会影响全部。
内容的提问来源于stack exchange,提问作者user15819643
相关产品推荐
相关产品推荐

