如何循环为函数输出分配不同变量?解决列表索引越界问题
解决IndexError: list assignment index out of range问题
你遇到的问题根源很明确:空列表没有任何元素,直接通过索引赋值(比如x_train[index] = ...)肯定会报错,因为这个索引对应的位置根本不存在。你的循环里试图用os.listdir('/directory').index(filename)作为索引来赋值,但初始的x_train等都是空列表,连索引0对应的位置都还没创建,自然会触发索引越界错误。
简便的解决思路
不用纠结索引,直接用列表的append()方法来动态添加元素就行——这是处理这种场景最直接高效的方式。另外建议把os.listdir('/directory')的结果先存成变量,避免循环里重复调用,既提升效率又能避免目录内容变化带来的意外问题。
修正后的代码
import os x_train = [] y_train = [] x_test = [] y_test = [] # 先获取目录下的所有文件名,避免重复调用os.listdir file_list = os.listdir('/directory') for filename in file_list: # 调用format_data获取四个返回值 xt, yt, xe, ye = lstm.format_data(new, seq_len, True) # 分别追加到对应的列表中 x_train.append(xt) y_train.append(yt) x_test.append(xe) y_test.append(ye)
额外优化提醒
我注意到你循环遍历文件名,但代码里没把filename传入lstm.format_data()——如果这个函数需要根据不同文件生成不同数据,记得把filename作为参数传进去,比如:
xt, yt, xe, ye = lstm.format_data(filename, new, seq_len, True)
不然循环遍历每个文件却没用到文件名,每次返回的结果都会是一样的,这大概率不是你想要的效果。
内容的提问来源于stack exchange,提问作者Carson P
相关产品推荐
相关产品推荐

