Python 为什么我会得到';列表索引超出范围';虽然时间列表值存在? 介绍
首先,非常感谢您花时间查看我的问题和代码。我知道我的编码需要改进,但正如所有新事物一样,它需要时间来完善 背景 我正在使用不同的功能来执行以下操作:Python 为什么我会得到';列表索引超出范围';虽然时间列表值存在? 介绍,python,function,dictionary,iteration,indexoutofboundsexception,Python,Function,Dictionary,Iteration,Indexoutofboundsexception,首先,非常感谢您花时间查看我的问题和代码。我知道我的编码需要改进,但正如所有新事物一样,它需要时间来完善 背景 我正在使用不同的功能来执行以下操作: 导入多个文件(目前为3个)。每个文件都包含时间、压力和无效列 将列表存储在字典中。所有压力都在一个压力字典中 过滤压力数据,确保我仍然拥有相应数量的时间数据点(对于每个文件) 我在main函数中调用这些函数 问题 在我第二次运行DataFilter函数中的时间循环之前,一切都运行得很好。然而,我确实检查过,我可以访问字典中关于压力和时间的所有三个不
t=timeFROMtimes[I]
代码
#导入库
导入glob
作为pd进口熊猫
将matplotlib.pyplot作为plt导入,将numpy作为np导入
从scipy.interpolate导入样条曲线
#输入参数
最大迭代次数=3次
i=0#开始迭代次数
t计数器=0
_文件数=3#目录中的文件数
sourcePath='C:\\Users\\*'#不显示实际目录
列出\u源\u文件的\u=glob.glob(sourcePath+'/*.TXT')
压力={}#初始化字典
times={}#初始化字典
#获取特定的文件和压力、时间值
def Get_source_文件(列出_source_文件,i):
#打印(“获取源文件”)
打开(源文件列表[i])作为源文件:
打印(“输入的文件:”,i+1)
lst=[]
对于源_文件中的行:
lst.append([float(x)表示第行中的x.split()
time=np.array([x[0]表示lst中的x])#文件中的第一行并生成数组
void=np.array([x[1]表示lst中的x])#文件中的第二行并生成数组
压力=(np.数组([x[2]表示lst中的x])*-1#等&更改导入压力数据的符号
返回压力、时间
#节省字典中的时间和压力
def保存指示(压力、时间、i):
#打印('saveindicational')
压力[i]=[压力]
时间[i]=[时间]
返回压力、时间
#过滤压力数据和调整时间
def过滤器数据(压力、压缩时间、i):
打印('FilterData')
t=时间间隔时间[i]
p=压力压缩压力[i]
data_points=int((t[0]-t[-1])/-0.02)#确定导入文件每列的数据点数量
过滤后的压力=[]。#为过滤后的压力创建一个空列表
pcounter=0#启动计数器
t计数器=0
time_new=[0,0.02]#for循环需要这些初始值
对于范围内的j(数据点):
如果p[j]0:
过滤的_压力。追加(p[j])#追加将所有新压力值保存在新_压力中的空列表
pcounter+=1
对于范围内的i(pcounter-1):
时间\新[0]=0
time_new[i+1]=time_new[i]+0.02#将上一个值加上0.02
时间\新。追加(时间)\追加时间列表
t计数器+=1#递增计数器
del time_new[-1]#不知何故,在末尾形成了一个应该删除的完整时间列表
返回过滤的\u压力,时间\u新
#主要的!!
P=列表()
当(i在循环中,您从主函数中取出时,您已经索引到次,但是在
#I took this out of the main function to check my error:
for i in range(2):
filtered_pressure,changed_time = FilterData(pressures[i],times[i],i)
# Here you call FilterData with times[i]
但在FilterData函数中,调用传递的变量timeFROMtimes
时,使用i
再次对其进行索引:
def FilterData (pressureFROMpressures,timeFROMtimes,i):
print('FilterData')
t=timeFROMtimes [i] # <-- right here
请修复缩进。我试图复制/粘贴您的代码,但由于缩进错误,它无法工作。另外,请提供您收到的错误的回溯。@CoryMadden,我已经修复了缩进并添加了我得到的输出的图像。感谢您的时间。是的,它需要做更多的更改-因为OP bui将字典中的条目作为一个1元素列表进行lds。这也需要更改。@m00am,谢谢您的回答。我已经删除了索引运算符([I])
对于时间
和压力
,但通过这样做,我得到了这个错误:类型错误:只有长度为1的数组可以转换为Python标量
@strubbly,请您详细说明一下,字典是一个1元素列表是什么意思吗?@strubbly确实。谢谢您指出这一点。我在读这篇文章时夸大了这一点我出去吃午饭了;)@m00am,很抱歉我反应太快了。你看到我删除了我的评论,因为我设法修复了它。我的代码现在运行得很好。谢谢你的帮助:)
def FilterData (pressureFROMpressures,timeFROMtimes,i):
print('FilterData')
t=timeFROMtimes [i] # <-- right here
def save_in_dictionary(pressure_array, time, i):
pressures[i] = pressure_array
times[i] = time
return pressures, times