循环存储数组值时遇IndexError: list index out of range问题求助
问题分析与解决
嘿,我来帮你排查这个索引越界的问题~
核心错误原因拆解
1. 循环变量被手动修改导致索引溢出
你在for循环里手动执行了k = k+1和l = l+1,但for循环本身会自动迭代变量值,这直接导致k的增长速度远超预期,最后超出了zax的索引范围。
举个例子:假设你输入mehrfach=2(重复2次测量)、werte=3(3个样本),zax会被初始化为[[], []](长度为2,索引只有0和1)。但循环过程中:
- 第一次外层
k=0,内层循环执行完后你手动把k改成1 - 第二次外层
k=1,内层循环执行完后手动把k改成2 - 第三次外层
k=2,此时zax[2]根本不存在,直接触发IndexError
2. 列表初始化逻辑和需求不匹配
从你的输入提示来看,你应该是想每个样本对应一个列表,存储该样本的多次重复测量值,但你初始化zax时用了mehrfach(重复次数)作为列表长度,而不是werte(样本数量),这也导致后续索引对应逻辑混乱。
修正后的代码
import numpy as np mehrfach = int(input('Please write how often you measured your samples. Please write an integer. For example: Duplicates: 2; Triplicates: 3; etc.')) werte = int(input('Please write how much samples you have. Please write an integer. For example: Two different samples: 2; Three different samples: 3, etc.')) # 初始化:每个样本对应一个空列表,长度为样本数量werte zax = [[] for _ in range(werte)] # 外层循环遍历每个样本 for k in range(werte): print(f"Enter measurements for sample {k+1}:") # 内层循环遍历该样本的重复测量次数 for l in range(mehrfach): abs_val = float(input('Please write down your measured absorption (float): ')) # 将值添加到当前样本的列表中 zax[k].append(abs_val) # 无需手动修改k和l,for循环会自动处理迭代 print('Measured absorptions:', zax)
关键修改说明
- 移除手动循环变量修改:删掉了
k = k+1和l = l+1,让for循环自动管理变量迭代,避免索引混乱 - 修正列表初始化逻辑:
zax的长度改为werte(样本数量),每个元素对应一个样本的测量值列表 - 优化输入体验:增加了样本编号提示,让输入过程更清晰
- 变量名规范:把
abs改成abs_val,避免和Python内置函数abs()重名(这是良好的编程习惯)
内容的提问来源于stack exchange,提问作者Wasabinuss
相关产品推荐
相关产品推荐

