Python二维列表赋值报错IndexError: list assignment index out of range
问题分析与解决方案
错误原因
你遇到的IndexError: list assignment index out of range是两个核心问题导致的:
- 二维列表结构搞反:你初始化的
pictures = [[x for x in range(7)] for y in range(25)]是25个子列表(对应25行),每个子列表仅7个元素(对应7列),但你的需求是7个实验对应7个子列表,每个子列表要存25张图,子列表长度不足导致存到第8张图时就会索引越界。 - 图片索引未重置:
imgC在第一个实验循环结束后不会自动归零,第二个实验开始时imgC会从25继续递增,直接超出子列表的合法索引范围(0-24)。
修正后的代码
# 初始化符合需求的二维列表:7个实验,每个实验预留25个图片位置 pictures = [[None for _ in range(25)] for _ in range(7)] # 用enumerate自动维护实验索引,避免手动管理expC for expC, exp_name in enumerate(experimentNames): imgC = 0 # 每个实验开始时重置图片索引 for picture_path in glob.iglob(f'{exp_name}/**/*.png', recursive=True): # 防止单个实验图片数量超过25张导致再次越界 if imgC >= 25: print(f"实验{exp_name}的图片数量超过25张,跳过剩余图片") break img = cv.imread(picture_path) pictures[expC][imgC] = img imgC += 1
额外说明
- 初始化列表时不要用
[[None]*25]*7,这种写法会让7个子列表指向同一个内存对象,修改其中一个会影响全部。 - 加入的图片数量判断可以提前拦截异常,如果你确认每个实验恰好25张图,也可以去掉这个判断。
内容的提问来源于stack exchange,提问作者Godan
相关产品推荐
相关产品推荐

