Python 为什么我会得到';列表索引超出范围';虽然时间列表值存在? 介绍

Python 为什么我会得到';列表索引超出范围';虽然时间列表值存在? 介绍,python,function,dictionary,iteration,indexoutofboundsexception,Python,Function,Dictionary,Iteration,Indexoutofboundsexception,首先,非常感谢您花时间查看我的问题和代码。我知道我的编码需要改进,但正如所有新事物一样,它需要时间来完善 背景 我正在使用不同的功能来执行以下操作: 导入多个文件(目前为3个)。每个文件都包含时间、压力和无效列 将列表存储在字典中。所有压力都在一个压力字典中 过滤压力数据,确保我仍然拥有相应数量的时间数据点(对于每个文件) 我在main函数中调用这些函数 问题 在我第二次运行DataFilter函数中的时间循环之前,一切都运行得很好。然而,我确实检查过,我可以访问字典中关于压力和时间的所有三个不

首先,非常感谢您花时间查看我的问题和代码。我知道我的编码需要改进,但正如所有新事物一样,它需要时间来完善

背景 我正在使用不同的功能来执行以下操作:

  • 导入多个文件(目前为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